2013-08-24 65 views
0

我有這樣由值的一定範圍內進行分組表中獲取的ID數

------------------- 
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是1.2,它大於1,所以它應該是2而不是1所示的結果! –

回答

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 
+0

我稍微改進了這個查詢來獲得我想要的 SELECT count(Q.id),CEIL(rating)AS integer_rating FROM question Q group by integer_rating ORDER BY rating desc; 但問題是它給我六行0,1,2,3,4,5我想合併評級範圍0在一個你可以建議 –

+1

感謝您的回覆我改變了一點這個查詢,並得到了我這裏是我的最終查詢 SELECT count(Q.id)as cnt,if(CEIL(rating)= 0,1,CEIL(rating))AS rate FROM question Q group by rate ORDER BY rate; –

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 

OUTPUT

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

謝謝這個查詢真的工作,除了一個情況下,作爲評級列的默認值爲0,所以如果評級爲零,它從結果中丟失,我希望所有那些評級爲0的行應該進入評級1. –

+0

好的,替換CEIL )''IF'(rating = 0,1,CEIL(rating))'。結果如下:http://sqlfiddle.com/#!2/e3e6a/2 –