2010-08-12 65 views
3

目前我在做一個查詢,有3子查詢,
所有查詢都在同一個表,
所有查詢有不同的where子句在同一張桌子上查詢4個更好的方法?

我曾經想過做一組然而,這會破壞SUM ()

這裏是查詢

SELECT SUM(club) AS club, 
(SELECT COUNT(id) FROM action_6_members WHERE SUBSTR(CODE, 1, 1) = '9') AS 5pts, 
(SELECT COUNT(id) FROM action_6_members WHERE SUBSTR(CODE, 1, 1) = 'A') AS 10pts, 
(SELECT COUNT(id) FROM action_6_members WHERE SUBSTR(CODE, 1, 1) NOT IN('9', 'A')) AS General 
FROM action_6_members; 

這裏是解釋

 
id select_type table    type rows Extra   
1 PRIMARY  action_6_members ALL 1471    
4 SUBQUERY  action_6_members ALL 1471 Using where 
3 SUBQUERY  action_6_members ALL 1471 Using where 
2 SUBQUERY  action_6_members ALL 1471 Using where 

回答

3

用途:

SELECT SUM(club) AS club, 
     SUM(CASE WHEN SUBSTR(CODE, 1, 1) = '9' THEN 1 ELSE 0 END) AS 5pts, 
     SUM(CASE WHEN SUBSTR(CODE, 1, 1) = 'A' THEN 1 ELSE 0 END) AS 10pts, 
     SUM(CASE WHEN SUBSTR(CODE, 1, 1) NOT IN('9', 'A') THEN 1 ELSE 0 END) AS General 
    FROM action_6_members; 
0

調整此:

SELECT SUM(club) as club, COUNT(1) FROM action_6_members GROUP BY SUBSTR(CODE, 1, 1) 
+0

我想這樣做類似的東西, 的但後來我結了數百行,所有與俱樂部的部分價值, ,我需要任何不以9開頭的代碼或分組爲一組 – Hailwood 2010-08-12 01:23:30

+0

我可以這樣做: 'SELECT SUM(club)AS club,COUNT(1)FROM action_6_members GROUP BY IF(SUBSTR(CODE,1, 1)= 9,1,IF(SUBSTR(CODE,1,1)='A',2,3));'但是我仍然以部分值爲結束總和 – Hailwood 2010-08-12 01:28:18

相關問題