从按某种值范围分组的表中获取ID的数量

时间:2013-08-24 07:56:17

标签: mysql sql

我有一张这样的表

-------------------
id    | rating
-------------------
1     | 1.2
-------------------
2     | 1.3
-------------------
3     | 2.3

我想要一个像

这样的结果
rating   row
------------
1        0
2        2
3        1
4        0
5        0

作为评级小于1的行是0 等级大于1且小于2的行为2 评级大于2且小于3的行为1 等级大于3且小于4的行为0 等级大于4且小于5的行是0

我完全是空白如何进行此查询 请帮帮我

2 个答案:

答案 0 :(得分:1)

SELECT table.*, CEIL(rating) AS integer_rating FROM table ORDER BY rating ASC

CEIL()将任何大于x.0的数字舍入到整数(x+1)。唯一的问题是0.2会根据您的喜好返回1而不是0。但是你可以在SQL之外进行快速比较,以便更改为零。

这将返回:

id    rating  integer_rating
----------------------------
1    1.2      2
2    1.3      2
3    2.3      3

答案 1 :(得分:0)

您可以使用CEIL功能。

SELECT  b.RatingValue, COALESCE(a.IDCOUNT, 0) IDCOUNT
FROM    
        (
            SELECT  CEIL(rating) AS RatingValue,
                   COUNT(*) IDCOUNT
            FROM    tableName
            GROUP   BY CEIL(rating)
            ORDER   BY RatingValue
        ) a 
        RIGHT JOIN
        (
            SELECT 1 RatingValue UNION ALL SELECT 2 UNION ALL
            SELECT 3 UNION ALL SELECT 4 UNION ALL
            SELECT 5
        ) b     ON a.RatingValue = b.RatingValue

输出

╔═════════════╦═════════╗
║ RATINGVALUE ║ IDCOUNT ║
╠═════════════╬═════════╣
║           1 ║       0 ║
║           2 ║       2 ║
║           3 ║       1 ║
║           4 ║       0 ║
║           5 ║       0 ║
╚═════════════╩═════════╝