19

したがって、これは機能します:

SELECT c.name AS country_name, c.population AS country_population, SUM(ci.population) AS city_population, ROUND(100*(SUM(ci.population)/c.population)) AS city_population_percent
FROM country AS c
JOIN city AS ci
ON c.code = ci.countrycode
WHERE c.continent = 'Europe'
GROUP BY c.name

しかし、city_population_percent の値が 30 より大きいものだけを取得する必要があるため、次のようにします。

SELECT c.name AS country_name, c.population AS country_population, SUM(ci.population) AS city_population, ROUND(100*(SUM(ci.population)/c.population)) AS city_population_percent
FROM country AS c
JOIN city AS ci
ON c.code = ci.countrycode
WHERE c.continent = 'Europe'
**AND ROUND(100*(SUM(ci.population)/c.population)) > 30**
GROUP BY c.name

そして、それは私が得るときです:

エラー コード 1111。グループ機能の無効な使用

つまり、次の条件を に追加すると失敗しますWHERE

AND ROUND(100*(SUM(ci.population)/c.population)) > 30
4

2 に答える 2

39

したがって、この条件をHAVING句に移動する必要があります

SELECT c.name AS country_name, c.population AS country_population, SUM(ci.population) AS city_population, ROUND(100*(SUM(ci.population)/c.population)) AS city_population_percent
            FROM country AS c
            JOIN city AS ci
            ON c.code = ci.countrycode
WHERE c.continent = 'Europe'
GROUP BY c.name
HAVING ROUND(100*(SUM(ci.population)/c.population)) > 30
于 2014-03-03T08:37:33.353 に答える
6

where 句で集計関数を使用していますが、これは SQL では実行できません。

代わりにHAVING句を使用します。

WHERE c.continent = 'Europe'
GROUP BY c.name
HAVING ROUND(100*(SUM(ci.population)/c.population)) > 30
于 2014-03-03T08:37:17.160 に答える