2011-02-06 26 views
0

我正在從一個表中提取記錄,其中一個字段的計數與其他字段的名稱相同。我只想要10條記錄。其中9條記錄給我的領域和它的數量。但我想顯示10條記錄作爲「其他」與所有剩餘字段與計數。這就像包裝記錄。想要獲取前9條記錄並創建一條記錄,這將成爲mysql中的「其他」

下面的東西就是表格內容。

emp_id |指定

1 |軟件Engg。

2 |軟件Engg。

3 |項目經理

不小於10的指定。

而且我想顯示前10條記錄爲

Software Engineers 20 
Project Manager  5 
.... 
.... 
.... 
Others 50 

有沒有什麼辦法讓SQL查詢的MySQL數據庫。因此,它將快速並節省應用程序級別的時間,我將「其他」的記錄數加起來。或者建議我如何以有效的方式使之成爲可能。

+0

你可以做一個標準的`SELECT .. GROUP BY`然後一個`UNION SELECT ... WHERE NOT EXISTS`嗎? – vol7ron 2011-02-06 21:22:08

回答

1

試試這個:

SELECT IF(rowNum <= 9, designation, 'Other') designation, SUM(cnt) 
FROM (SELECT designation, COUNT(*) cnt, (@row := @row + 1) rowNum 
    FROM contents, (SELECT @row := 0) dm 
    GROUP BY designation 
    ORDER BY designation 
) d 
GROUP BY IF(rowNum <= 9, designation, 'Other') 

更改GROUP BYORDER BY但是你決定什麼9顯示。

1

你可以在你的查詢中使用SQL_CALC_FOUND_ROWS選項,它會告訴MySQL統計總行數而不考慮LIMIT子句。您仍然需要執行第二個查詢以檢索行數,但這是一個簡單的查詢,並且不像檢索數據的查詢那麼複雜。

用法很簡單。在您的主查詢中,您需要在SELECT之後添加SQL_CALC_FOUND_ROWS選項,而在第二個查詢中,您需要使用FOUND_ROWS()函數來獲取總行數。查詢應該是這樣的:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10; 

SELECT FOUND_ROWS(); 
+0

謝謝...它的工作原理...我可以通過提供限制9,無法找到行來使用它來獲得員工數量。 – Kammy 2011-02-06 12:56:14

+0

這並不能完全解決我的問題。因爲我從emp_design Limit 9中寫入查詢選擇指定,計數(不同的emp_id),$ num_rows;但它給我零記錄。 – Kammy 2011-02-06 13:42:02

相關問題