私の質問から受け取った答えとして、なんらかの理由でコードに適用することに夢中になり、なぜそれが機能しなかったのか。
これがテーブル上の私のデータの一部です。
元のコード:
SELECT AGE_RANGE, COUNT(*) FROM (
SELECT CASE
WHEN YearsOld BETWEEN 0 AND 5 THEN '0-5'
WHEN YearsOld BETWEEN 6 AND 10 THEN '6-10'
WHEN YearsOld BETWEEN 11 AND 15 THEN '11-15'
WHEN YearsOld BETWEEN 16 AND 20 THEN '16-20'
WHEN YearsOld BETWEEN 21 AND 30 THEN '21-30'
WHEN YearsOld BETWEEN 31 AND 40 THEN '31-40'
WHEN YearsOld > 40 THEN '40+'
END AS 'AGE_RANGE'
FROM (
SELECT YEAR(CURDATE())-YEAR(DATE(birthdate)) 'YearsOld'
FROM MyTable
) B
) A
GROUP BY AGE_RANGE
これが結果です。
私がやろうとしているのは、パース、西オーストラリア、サンベリーを含む上の写真に見られるように、その地域に何人の人がいるかをカウントする別の列を追加しようとしていることです. 、ビクトリアなど。
問題を解決するための最初の試み
以下に示すように、場所と COUNT(location) loc を追加して、場所の名前を取得し、テーブル内で重複している場所の数を数えます。
SELECT AGE_RANGE, COUNT(*), location, COUNT(location) loc FROM (
SELECT CASE
WHEN YearsOld BETWEEN 0 AND 5 THEN '0-5'
WHEN YearsOld BETWEEN 6 AND 10 THEN '6-10'
WHEN YearsOld BETWEEN 11 AND 15 THEN '11-15'
WHEN YearsOld BETWEEN 16 AND 20 THEN '16-20'
WHEN YearsOld BETWEEN 21 AND 30 THEN '21-30'
WHEN YearsOld BETWEEN 31 AND 40 THEN '31-40'
WHEN YearsOld > 40 THEN '40+'
END AS 'AGE_RANGE', 'location'
FROM (
SELECT YEAR(CURDATE())-YEAR(DATE(birthday)) 'YearsOld'
FROM event_participants
) B
) A
FROM event_participants WHERE location <> '' GROUP BY location HAVING loc >= 1 ORDER BY loc DESC LIMIT 5
どの結果に..
明らかに、神の助けから聞くことはうまくいきません..
この問題を修正するための 2 回目の試み
SELECT AGE_RANGE, COUNT(*), location FROM (
SELECT CASE
WHEN YearsOld BETWEEN 0 AND 5 THEN '0-5'
WHEN YearsOld BETWEEN 6 AND 10 THEN '6-10'
WHEN YearsOld BETWEEN 11 AND 15 THEN '11-15'
WHEN YearsOld BETWEEN 16 AND 20 THEN '16-20'
WHEN YearsOld BETWEEN 21 AND 30 THEN '21-30'
WHEN YearsOld BETWEEN 31 AND 40 THEN '31-40'
WHEN YearsOld > 40 THEN '40+'
END AS 'AGE_RANGE', 'location'
FROM (
SELECT YEAR(CURDATE())-YEAR(DATE(birthday)) 'YearsOld'
FROM event_participants
) B
) A
GROUP BY AGE_RANGE
そして結果は…
国の名前を表示する代わりに、場所のみを表示します。
良い..
簡単に言えば、コードの何が問題なのですか? このようなものの解決策はありますか?
私の望む結果は、
AGE_RANGE COUNT(*) location total number of same location
16-20 4 Name of location #
21-30 45 Name of location #
31-40 79 Name of location #
40+ 102 Name of location #