Mysql 按年龄分组的sql
希望你能帮助我 我有以下数据库:Mysql 按年龄分组的sql,mysql,Mysql,希望你能帮助我 我有以下数据库: country | Date_of_birth ----------------------- france | 1980-07-01 spain | 1978-03-23 greece | 1981-05-05 germany | 1974-08-11 我试图得到这个结果: country | 13 - 17 | 25 - 45 | 65 - 75 ------------------------------------- france |
country | Date_of_birth
-----------------------
france | 1980-07-01
spain | 1978-03-23
greece | 1981-05-05
germany | 1974-08-11
我试图得到这个结果:
country | 13 - 17 | 25 - 45 | 65 - 75
-------------------------------------
france | | 1 |
spain | | 1 |
greece | | 1 |
到目前为止我发现的问题是:
SELECT SUM( IF( age BETWEEN 13 AND 17 , 1, 0)) AS '13 - 17',
SUM( IF( age BETWEEN 25 AND 45 , 1, 0)) AS '25 - 45',
SUM( IF( age BETWEEN 65 AND 75 , 1, 0)) AS '65 - 75'
FROM (SELECT TIMESTAMPDIFF( YEAR, Date_of_birth, CURDATE()) AS age, country FROM data
) AS test
GROUP BY country
HAVING country IN ("france","greece,"spain")
结果:
13 - 17 | 25 - 45 | 65 - 75
----------------------------
| 1 |
| 1 |
| 1 |
你知道我一开始是怎么得到“国家”专栏的吗
提前谢谢
仅对聚合列起作用。您需要一个简单的,其中
:
SELECT
country,
SUM(age BETWEEN 13 AND 17) AS '13 - 17',
SUM(age BETWEEN 25 AND 45) AS '25 - 45',
SUM(age BETWEEN 65 AND 75) AS '65 - 75'
FROM (SELECT TIMESTAMPDIFF( YEAR, Date_of_birth, CURDATE()) AS age, country FROM data
) AS test
WHERE country IN ('france', 'greece', 'spain')
GROUP BY country
还要注意查询的简化:在mysql中,true
是1
,false
是0
,因此您可以简单地对条件求和-您不需要大小写
此外,您还有一个语法错误-您需要在国家/地区值周围加上单引号。如果您希望包含“国家/地区”列,则必须将其添加到选择部分:
SELECT
country,
SUM( IF( age BETWEEN 13 AND 17 , 1, 0)) AS '13 - 17',
SUM( IF( age BETWEEN 25 AND 45 , 1, 0)) AS '25 - 45',
SUM( IF( age BETWEEN 65 AND 75 , 1, 0)) AS '65 - 75'
FROM (SELECT TIMESTAMPDIFF( YEAR, Date_of_birth, CURDATE()) AS age, country FROM data
) AS test
GROUP BY country
HAVING country IN ("france","greece,"spain")
太棒了,谢谢你的快速回复!我将阅读有关聚合列的内容,必须理解其概念!;)几乎,您需要将表数据添加到“FROM”
SELECT country, SUM...., SUM..., SUM...