从多个范围中选择多个值

时间:2013-01-05 14:51:41

标签: mysql

  

可能重复:
  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

expli:

  • 1500-1999 - >意味着我想要数字在1500到1999之间    等等,和其他人在一起。

  • 所有值都是计算所有值。

    *如果有人需要在那里进行测试,这里是sql fiddle

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

1 个答案:

答案 0 :(得分:5)

这是一种使用范围的枢轴。使用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()累加。

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