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...