Проблема sql с наличием

Я пытаюсь решить эту проблему.

Вернуть таблицу, в которой указаны язык и количество говорящих, но включены только языки, на которых говорящих более 200000000? Упорядочивайте эти результаты по убыванию в зависимости от количества выступающих.

Это мой код:

SELECT 
    Language,
    Percentage / 100 AS 'Percentage',
    SUM(Population) AS Population,
    Population * Percentage AS 'Speakers'
FROM 
    language
GROUP BY 
    Language
HAVING 
    Speakers > 200000000;

Может кто-то помочь мне, пожалуйста?

2
0
44
2

Ответы 2

Вы можете попробовать ниже, используя вычисленное выражение говорящих, имея

SELECT 
     Language,
     Percentage/100 AS 'Percentage',
     SUM(Population) AS Population,
     SUM(Population)*(Percentage/100) AS 'Speakers'
FROM language
GROUP BY Language
HAVING SUM(Population)*(Percentage/100)> 200000000
ORDER BY SUM(Population)*(Percentage/100) DESC

Не используйте одинарные кавычки для псевдонимов столбцов. Это действительно плохая привычка. Использование одинарных кавычек только для строковых констант и констант даты.

SQL (в общем) позволяет ссылаться на псевдонимы столбцов в ORDER BY. Некоторые базы данных также позволяют ссылаться на них в пункте HAVING, но не на все.

Я не уверен, что должен делать Percentage. Он должен быть в GROUP BY. В других случаях Percentage должен быть частью расчета агрегации:

SELECT Language,
       SUM(Percentage * Population / 100) / SUM(Population) AS Percentage,
       SUM(Population) AS Population,
       SUM(Population * Percentage/100) AS Speakers
FROM language
GROUP BY Language
HAVING SUM(Population*Percentage/100.0) > 200000000
ORDER BY Speakers DESC;

Обратите внимание, что некоторые базы данных используют целочисленное деление, поэтому 99/100 = 0, а не 0,99. По этой причине я бы сделал:

SELECT Language, 
       SUM(Percentage * Population / 100.0) / SUM(Population) AS Percentage,
       SUM(Population) AS Population,
       SUM(Population*Percentage/100.0) AS Speakers
FROM language
GROUP BY Language
HAVING SUM(Population*Percentage/100.0) > 200000000
ORDER BY Speakers DESC;

Другие вопросы по теме