我一直试图找到最简单的方法来对我的查询中的两个年龄组进行分组。这样的事情有可能起作用吗?
SELECT age,
sum(case when age < '20' then 1 else 0 end),
sum(case when age > '20' then 1 else 0 end)
FROM Contact
GROUP BY ...."custom group one"......"custom group one".....??
Run Code Online (Sandbox Code Playgroud)
我知道你通常应该在一个专栏上分组,但在我的情况下我不起作用。有什么建议?谢谢!
Table: Desired Query Result:
Name Age 0 1
John 18 Under 20 2
Harry 22 Over 20 2
Mary 17
Megan 27
Run Code Online (Sandbox Code Playgroud)
SELECT CASE
WHEN age = '21' THEN 'young'
WHEN age BETWEEN '22' AND '60' THEN 'middle'
ELSE 'old'
END, Count(id)
FROM Contact
GROUP BY CASE
WHEN age = '21' THEN 'young'
WHEN age BETWEEN '22' AND '60' THEN 'middle'
ELSE 'old'
END
Run Code Online (Sandbox Code Playgroud)
注意:AS可用于为SELECT语句中的分组条件分配别名,从而避免重复条件两次,即
SELECT CASE
WHEN age = '21' THEN 'young'
WHEN age BETWEEN '22' AND '60' THEN 'middle'
ELSE 'old'
END AS age_range, Count(id)
FROM Contact
GROUP BY age_range
Run Code Online (Sandbox Code Playgroud)
所以这将是:
SELECT
COUNT(1),
age>20 AS Above20
FROM t
GROUP BY age>20
Run Code Online (Sandbox Code Playgroud)
-检查这个小提琴。
或者,使用SUM()和 列视图:
SELECT
SUM(IF(age>20, 1, 0)) AS Above20,
SUM(IF(age<=20, 1, 0)) AS Below20
FROM
t
Run Code Online (Sandbox Code Playgroud)
-检查这个小提琴。