Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL问题与拥有_Sql - Fatal编程技术网

SQL问题与拥有

SQL问题与拥有,sql,Sql,我正在努力解决这个问题 返回一个列出语言和讲者数量的表,但只包括讲者人数>20000000的语言?根据发言者的数量将这些结果从高到低排序 这是我的代码: SELECT Language, Percentage / 100 AS 'Percentage', SUM(Population) AS Population, Population * Percentage AS 'Speakers' FROM language GROUP BY Lan

我正在努力解决这个问题

返回一个列出语言和讲者数量的表,但只包括讲者人数>20000000的语言?根据发言者的数量将这些结果从高到低排序

这是我的代码:

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

有人能帮我吗?

你可以在下面使用演讲者的计算表达式来尝试

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(一般情况下)允许您按的顺序引用列别名。有些数据库也允许您在
HAVING
子句中引用它们,但不是全部

我不确定百分比应该做什么。它应该在
组中。在其他情况下,
百分比
应作为聚合计算的一部分:

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;