【发布时间】:2015-09-12 23:59:55
【问题描述】:
我有学生记录,我需要按年龄对他们进行分组。我有这种情况:
- 如果年龄组只有一名成员,请显示他/她的姓名和性别
- 其他
- 将“某些字符串”显示为名称
- 检查成员的性别,如果都是 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 但它不起作用。请告知我如何改进这一点。谢谢。
【问题讨论】:
标签: mysql sql optimization query-optimization mariadb