【问题标题】:COUNT(Col1) by partitioning Col2 values in equidistant intervalsCOUNT(Col1) 通过以等距间隔对 Col2 值进行分区
【发布时间】:2012-11-10 02:08:39
【问题描述】:

MySQL

我有两列。 Col1 包含一个 ID 列表,Col2 包含一个数字列表(范围在 -100 和 200+ 之间)。我想要 COUNT(IDs) WHERE Col2 BETWEEN -100 AND -75,以 25 为间隔一直到上限。

使用 MySQL(或 Excel)最有效的方法是什么。谢谢。

【问题讨论】:

  • 我不明白。你说你想要 -100 和 -95 之间的值(它们是 -100、-99、-98、-97、-96、-95),间隔为 25(不存在)到 200 的限制(这很好超出您指定的范围)
  • 我想要 COUNT(Col1) WHERE Col2 BETWEEN -100 AND -75, COUNT(Col1) WHERE Col2 BETWEEN -75 AND -50, COUNT(Col1) WHERE Col2 BETWEEN -50 AND -25, . ...,50 和 75,...... 150 和 175,......
  • 在我的问题中,我实际上是想说“...WHERE Col2 BETWEEN -100 AND -75...”而不是 '-95' - 我的错误,因此是误解。跨度>

标签: mysql count range partitioning intervals


【解决方案1】:

你可以用这个:

select count(Col1) cnt
from ta
group by ceil(col2 / 25);

想想,它会更短=)

【讨论】:

  • 这肯定更短更有效,尽管使用 CEIL 进行四舍五入对我想要输出的内容不起作用。 Col2 包含随机 +ve、-ve 数字的列表,它们不是等距的。例如,对于一组 200 条记录,我至少有 180 个不同的数字。要按间隔对 Col2 进行分区,我必须使用 BETWEEN 运算符使用一系列条件。
  • @doubleu4:向上或向下取整取决于您的选择(如果您想要稍有不同,请不要使用CEIL())。但是这个答案肯定是有效的。你到底想输出什么?
  • @ypercube 这不适用于我想要的,例如,考虑 Col2 中的这个系列:“...-75, -72, -65, -22, -18, ……”。使用 CEIL(),我不知道 COUNT(Col1) = ?? Col2 在 -50 和 -25 之间。准确地说,就我处理的数据而言,我想要(获得)42 个数据点,CEIL 查询给了我超过 80 个。
  • 当然,但这是一种非常巧妙的技术。
【解决方案2】:
SELECT SUM(CASE WHEN Col2 BETWEEN -100 AND -75 THEN 1 ELSE 0 END) AS Interval1,
       SUM(CASE WHEN Col2 BETWEEN -74 AND -50 THEN 1 ELSE 0 END) AS Interval2,
       ...
       SUM(CASE WHEN Col2 BETWEEN 176 AND 200 THEN 1 ELSE 0 END) AS Interval12
    FROM YourTable

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多