0

我有一张这样的桌子

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

我想要这样的结果

rating   row
------------
1        0
2        2
3        1
4        0
5        0

as 评分小于 1 的行为 0 评分大于 1 且小于 2 的行为 2 行 评分大于 2 且小于 3 为 1 行 评分大于 3 且小于 4 为 0 行 评分大于4 小于 5 为 0

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

4

2 回答 2

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
于 2013-08-24T08:09:26.500 回答
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 ║
╚═════════════╩═════════╝
于 2013-08-24T08:02:51.773 回答