【问题标题】:Select multiple values from multiple range [duplicate]从多个范围中选择多个值[重复]
【发布时间】:2023-03-17 03:35:01
【问题描述】:

可能重复:
In SQL, how can you “group by” in ranges?

我有这样的桌子

price
id  |  prices
1   |   3910
2   |   4125
3   |   3740
4   |   2700
5   |   1600
6   |   2150
7   |   2430

我希望的输出是这样的

1500-1999  |  2000-2499 | 2500-2999  | 3000-3499 | 3500-3999 | 4000-4499  |   allvalues
--------------------------------------------------------------------------------------
   1       |      2     |      1     |     0     |     2     |     1      |   7

解释:

  • 1500-1999 --> 表示我想要 1500 到 1999 之间的计数 等等,和其他人一起。

  • allvalues 是统计所有值。

    *这里是sql fiddle,如果有人需要在那里测试的话。

希望一切都清楚,感谢您的帮助。

【问题讨论】:

  • 是的,看起来不错,而且很有帮助
  • 链接的问题是相关的,但格式不同,计数为一列,范围为一列 - 不是每个范围的列。

标签: mysql


【解决方案1】:

这是一种使用范围的枢轴。对于使用 SUM(CASE...) 的数据透视查询,该模式是相同的

SELECT
  SUM(CASE WHEN prices BETWEEN 1500 AND 1999 THEN 1 ELSE 0 END) AS `1500-1999`,
  SUM(CASE WHEN prices BETWEEN 2000 AND 2499 THEN 1 ELSE 0 END) AS `2000-2499`,
  SUM(CASE WHEN prices BETWEEN 2500 AND 2999 THEN 1 ELSE 0 END) AS `2500-2999`,
  SUM(CASE WHEN prices BETWEEN 3000 AND 3499 THEN 1 ELSE 0 END) AS `3000-3499`,
  SUM(CASE WHEN prices BETWEEN 3500 AND 3999 THEN 1 ELSE 0 END) AS `3500-3999`,
  ...
  COUNT(*) AS `All Values`
FROM
  prices

替换其余范围...如果条件匹配,CASE 将生成 0 或 1,并且这些值由聚合 SUM()s 相加。

http://sqlfiddle.com/#!2/5803e/10

【讨论】:

  • 和 allvalues ,应该是 count(*) 吧?
  • @goodmood 是的,抱歉我错过了。
猜你喜欢
  • 1970-01-01
  • 2021-01-11
  • 2019-09-18
  • 1970-01-01
  • 2019-07-18
  • 2019-05-17
  • 1970-01-01
  • 2020-12-18
  • 2017-05-06
相关资源
最近更新 更多