我有学生记录,我需要按年龄对他们进行分组。我有这种情况:
- 如果年龄组只有一名成员,显示他/她的姓名和性别
- 其他
- 将“SOME STRING”显示为名称
- 检查成员的性别,如果都是 FEMALE,则返回 FEMALE。如果都是 MALE,返回 MALE,否则返回 MIX
我想到了这个问题
SELECT Count(id) as GROUP_SIZE,
CASE WHEN COUNT(id) = 1 THEN name ELSE 'SOME STRING' END as name,
CASE WHEN COUNT(id) = 1 THEN sex ELSE (
CASE WHEN COUNT(CASE WHEN sex = 'MALE' THEN 1 END) = 0 THEN 'FEMALE'
WHEN COUNT(CASE WHEN sex = 'FEMALE' THEN 1 END) = 0 THEN 'MALE'
ELSE 'MIX'
END
) END as sex
FROM students GROUP BY age
此查询输出我想要的场景,但我多次调用 Count(id)。这会影响调用多个 Count 时的性能吗?或者,如果 Count(id) 执行了一次,它是否会在连续调用 Count(id) 时有一个恒定的时间?我尝试了 CASE WHEN GROUP_SIZE
但它不起作用。请告知我如何改进这一点。谢谢。
最佳答案
我不确定在 count(COLUMN)
方面如何优化 MySQL,但是如果您改用 count(1)
,您将获得(至少相等)最佳性能。
关于mysql - SQL 多个 CASE WHEN 具有相同的 Count 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31066272/