2013-01-21 18 views
1

假設我有以下查詢。將3個查詢優化爲單個查詢的最佳方式

SELECT count(*) FROM info WHERE info = 'a' and uid = 1 
SELECT count(*) FROM info WHERE info = 'b' and uid = 1 
SELECT count(*) FROM info WHERE info = 'c' and uid = 1; 

而不是編寫3個查詢有什麼辦法讓我可以在一個查詢中獲得所有這些細節?

回答

4
SELECT info, count(*) as info_cnt 
FROM T 
WHERE uid = 1 and info IN ('a', 'b','c') 
GROUP BY info 
+0

感謝這項工作 – shanks

+2

這可以簡化更多,'WHERE uid = 1和信息IN('a','b' , 'C')' –

2
SELECT info, 
     SUM(CASE WHEN info = 'a' THEN 1 ELSE 0 END) `a`, 
     SUM(CASE WHEN info = 'b' THEN 1 ELSE 0 END) `b`, 
     SUM(CASE WHEN info = 'c' THEN 1 ELSE 0 END) `c` 
FROM tableName 
WHERE uid = 1 AND info IN ('a','b','c') 
GROUP BY info 

這會給你造成排

uid a b c 
============== 
1 5 2 6 
+0

同樣的意見:此查詢不過濾與信息行= A,B,C – RGO

+0

@Reza你確定嗎? –

+0

不,我認爲你的查詢是正確的。 – RGO

4

集團通過?

SELECT count(*) AS count, info FROM info WHERE uid=1 GROUP BY info 

count | info 
5  a 
10  b 
11  c 
+0

此查詢還會生成帶有信息的行!= a,b,c – RGO

+0

此查詢在信息不是a或b或c – shanks

+1

時有問題添加條件'和信息IN('a','b','c')'。誰曾經說過,SO上的答案需要100%正確的複製和粘貼解決方案?排除錯誤的信息類型不應該是需要擔心的事情。 – dognose