mysql - SQL:计算两个值之间出现的次数

标签 mysql sql

我很不好意思问这么琐碎的 SQL 问题,但我似乎无法找到或开发答案。

我有一列 ID,其中一些出现多次。我想计算每个 ID 出现的次数并相应地对它们进行分组。

例如:

IDs: 112 113 114 115 112 112 112

任意分组:1、2-5、>5

最终获得返回

NUMBER OCCURRENCES 
1      3 
2-5    1
6+     0

代码?

SELECT "1" as NUMBER, 
COUNT(ID) AS OCCURRENCES 
FROM TABLE WHERE OCCURRENCES = 1
UNION
SELECT "2-5" as NUMBER,
COUNT(ID) AS OCCURRENCES
FROM TABLE WHERE OCCURRENCES BETWEEN 2 AND 5
UNION
SELECT "6+" as NUMBER,
COUNT(ID) AS OCCURRENCES
FROM TABLE WHERE OCCURRENCES > 5

感谢您的帮助,

最佳答案

我认为你基本上想要一个直方图的直方图:

select cnt, count(*), min(id), max(id)
from (select id, count(*) as cnt
      from t
      group by id
     ) t
group by cnt;

您可以为此添加范围:

select (case when cnt = 1 then '1'
             when cnt <= 5 then '2-5'
             else '6+'
        end) as cnt_range, count(*), min(id), max(id)
from (select id, count(*) as cnt
      from t
      group by id
     ) t
group by cnt_range
order by min(cnt);

这不会产生 0 值。我不确定这对于您需要做的事情是否真的很重要。

关于mysql - SQL:计算两个值之间出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642795/

相关文章:

PHP mySQL连接问题

php - 我想在不使用 phpmyadmin 的情况下从数据库中导出单个表

将数据库移动到其他服务器后,SQL azure 数据库登录不起作用

mysql - 为什么操作数应该只包含一列?

sql - 有效地查找子网内可用 IP 地址的列表/范围

c# - 尝试存储 ListView ID

php - 数据库中的 UTF-8 文本未正确显示在电子邮件中

mysql - 粘附总和小计 mysql crosstab by percentage

php - 使用php和mysql创建csv文件时有文件大小限制吗?

sql - Heroku Postgres 数据库的只读权限