是否可以为 MySQL 查询自定义 GROUP BY?

use*_*172 6 mysql group-by

我一直试图找到最简单的方法来对我的查询中的两个年龄组进行分组。这样的事情有可能起作用吗?

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)

Alm*_* Do 1

所以这将是:

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)

-检查这个小提琴