我有一张这样的表
-------------------
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
我完全是空白如何进行此查询 请帮帮我
答案 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 ║
╚═════════════╩═════════╝