按计数 sql 分组

Posted

技术标签:

【中文标题】按计数 sql 分组【英文标题】:group by count sql 【发布时间】:2021-09-30 09:39:23 【问题描述】:

我有一个脚本

SELECT  customer_id, COUNT(*)
FROM devices 
GROUP BY customer_id
ORDER BY 2 desc;

结果是

customer_id      count
1234              8
4567              7
8910              7
1112              7
1314              5
1516              5

但我期待的是

devices      customer
8              1
7              3
5              2

有什么办法不使用新表?

【问题讨论】:

【参考方案1】:

使用您当前的查询作为另一个查询的来源:

with temp as
  -- this is your current query
  (select customer_id, 
          count(*) cnt
   from devices
   group by customer_id
  )
select cnt as devices, 
       count(*) as customer
from temp
group by cnt;

【讨论】:

【参考方案2】:

count(*) 的通常用途是找出许多行已通过 group 函数聚合。想让你蚂蚁做的是在第二次选择中汇总你的结果,然后再次询问 count(*) 以获得你描述的结果。

【讨论】:

我试过 ``` SELECT customer_id, COUNT(1) FROM ( SELECT customer_id, COUNT(*) FROM devices GROUP BY customer_id ORDER BY 2 desc; ) devices GROUP BY customer_id ``` 它它不起作用

以上是关于按计数 sql 分组的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 选择按多个字段分组的前 n 个,按计数排序

sql 按计数获取日期的博客存档格式,并按月/年分组

如何在单个 SQL 查询中使用多个计数和按条件分组

按年龄分组和计数

分组值在 SQL (maria DB) 中按时间存储直到零,并与计数一起进行求和

用于计数和显示(列中的不同值)的 Sql 查询优化,按其他两列分组