mysql - SQL 多个 CASE WHEN 具有相同的 Count 函数

标签 mysql sql optimization query-optimization mariadb

我有学生记录,我需要按年龄对他们进行分组。我有这种情况:

  • 如果年龄组只有一名成员,显示他/她的姓名和性别
  • 其他
    • 将“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/

相关文章:

optimization - 在shell中以不同的顺序调用uniq和排序

php - mysqli 无法在连接上设置 session 时区。保持 UTC。在 RDS mysql 实例上

asp.net - web.config 从 SQL Server 更改为 MySQL 连接

mysql - 根据 DATETIME 类型从表中获取最新记录

javascript - 如何使用 javascript 函数重用 HTML 代码块?

javascript - 在 JS 对象中初始化此属性的正确方法

MySQL 选择索引列

php - 如何使用 2 个不同的 ID 进行分组和排序

c# - 是否需要联合查询

mysql - 如何从 Hibernate 中引用的表中检索数据