【问题标题】:SQL: count number of occurrences between two valuesSQL:计算两个值之间出现的次数
【发布时间】:2018-08-01 21:55:38
【问题描述】:

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

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

例如:

ID: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

感谢您的帮助,

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    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 值。我不确定这对你需要做的事情是否真的很重要。

    【讨论】:

      【解决方案2】:

      仅根据您对任务的描述,这应该可以让您继续前进。

      SELECT [ID], COUNT([ID]) AS OCCURRENCES FROM t GROUP BY [ID], ORDER BY OCCURRENCES DESC
      

      这将生成所有 ID 的列表以及与该 ID 相关联的出现次数(按降序排列)。因为你提到范围是任意的,所以我选择了这条路线。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 2017-11-05
        • 2012-11-02
        • 1970-01-01
        相关资源
        最近更新 更多