mySQL高效统计表

标签 mysql sql database

myTable

基本上我有一个表名称 myTable ,里面有 Name,Class ,我想像下表一样对它们进行排序,其中包含每个名称的计数以及它们拥有的 1,2,3 的数量。下面是我的代码目前有,但它适用于少量条目,如果表有 20,000 行,则需要很长时间才能执行。

Select DISTINT(Name),
       (Select count(*) from `myTable` d1 where d1.Name = dd.Name and Class=1),
       (Select count(*) from `myTable` d2 where d2.Name = dd.Name and Class=2),
       (Select count(*) from `myTable` d3 where d3.Name = dd.Name and Class=3)
from `myTable` dd
Order by Name;

最佳答案

这是经典的条件聚合:

Select Name,
       sum(case when Class = 1 then 1 else 0 end),
       sum(case when Class = 2 then 1 else 0 end),
       sum(case when Class = 3 then 1 else 0 end)
from myTable
group by Name

关于mySQL高效统计表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31020794/

相关文章:

c# - 读取数据库出错,方法或操作未实现

sql - 如何在firebird中使用GROUP BY

database - 垂直数据库中的投影

mysql - 如何使用 LEFT JOIN 和 GROUP BY 选择具有最小 count() 的记录?

mysql - 艰难的 mysql 嵌套表结果挑战

mysql - 特定的 SQL 查询

oracle - 寻找带有Windows GUI的基于SQL的RDBMS

sql - 由于外键约束问题而插入 A 错误

连接具有相同字段名称的表时的 PHP 关联数组

sql - 没有与引用表的给定键匹配的唯一约束