まだ勉強し始めて三日ほどしか経っていないMySQL初心者です。
現在の日付と生年月日から年齢を求める式を用いて、世代ごとの人数を表示するプログラムを書いています。
case文を使って範囲を指定し、条件に当てはまるものを表示するようにしたいのですが、エラーがでてしまい、想像している実行結果とは異なるものが表示されてしまいます。
以下プログラムと実行結果です。見やすいように改行しています。
因みに year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )はXXXX-YY-ZZという年-月-日の日付から年齢を表示する式です。
select case birthday when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 10 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 20 then '10代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 20 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 30 then '20代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 30 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 40 then '30代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 40 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 50 then '40代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 50 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 60 then '50代' else '定年' end as 世代, count( (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) ) as 人数 from emp3 group by case birthday when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 10 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 20 then '10代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 20 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 30 then '20代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 30 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 40 then '30代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 40 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 50 then '40代' when (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) >= 50 and (( year(curdate()) - year(birthday) ) - ( right(curdate(),5) < right(birthday,5) )) < 60 then '50代' else '定年' end; +--------+--------+ | 世代 | 人数 | +--------+--------+ | 定年 | 1500 | +--------+--------+ 1 row in set, 1218 warnings (0.01 sec) Warning (Code 1292): Incorrect datetime value: '1'
エラー文は一行ではなく複数表示されています。
emp3の中身は1500行分このようになっています。
お願いします。
+------+--------------+--------------+------------+---------+
| id | name | address | birthday | dept_id |
+------+--------------+--------------+------------+---------+
| 1 | 安斎 | 神奈川県 | 1969-10-13 | 3 |
| 2 | 神崎 | 愛媛県 | 1972-01-10 | 5 |
| 3 | 若山 | 兵庫県 | 1961-12-09 | 8 |
| 4 | 西野 | 神奈川県 | 1993-05-27 | 7 |
| 5 | 曽我 | 福岡県 | 1981-04-15 | 3 |
| 6 | 岡 | 滋賀県 | 1997-02-15 | 6 |
| 7 | 立石 | 岡山県 | 1950-08-16 | 1 |

回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/18 03:28
2016/10/18 03:37
2016/10/18 03:37
2016/10/18 03:59 編集
2016/10/18 07:39
2016/10/19 01:28 編集