2010-05-18 59 views
2

考慮下表:計數兩次查詢,一次使用限制

Table1 
[class] [child] 
math  boy1 
math  boy2 
math  boy3 
art  boy1 

Table2 
[child] [glasses] 
boy1  yes 
boy2  yes 
boy3  no 

如果我想查詢每個班的孩子數,我可以這樣做:

SELECT class, COUNT(child) FROM Table1 GROUP BY class 

和如果我想查詢每班戴眼鏡的孩子數量,我會這樣做:

SELECT Table1.class, COUNT(table1.child) FROM Table1 
LEFT JOIN Table2 ON Table1.child=Table2.child 
WHERE Table2.glasses='yes' GROUP BY Table1.class 

但我真正想要做的是:

SELECT class, COUNT(child), COUNT(child wearing glasses) 

坦率地說,我不知道如何做到這一點只有一個查詢。

有幫助嗎?

+0

如何嘗試嵌套選擇? – Hanseh 2010-05-18 04:18:19

+0

我不知道如何使一個嵌套的選擇符合類的要求分組。隨意發佈解決方案! – Drew 2010-05-18 04:25:50

+0

請發佈您的正確查詢結果.. – Karthik 2010-05-18 05:06:25

回答

2

你可以嘗試這樣的事情(不語法檢查):

SELECT 
    class, 
    COUNT(distinct Table1.child), 
    SUM(IF(Table2.glasses='yes', 1, 0)) 
FROM Table1 
LEFT JOIN Table2 ON Table1.child=Table2.child 

這是一個有點哈克,你會發現這樣做在兩個查詢它只是更容易,但這種技術在緊要關頭很適合我

+0

謝謝,工作正常! – Drew 2010-05-18 05:03:09

1

在MySQL中,你可以做這樣的事情:

SELECT類,COUNT(孩子),SUM(IF(眼鏡= '是',1,0)

+0

按發帖順序排序,Dan Head稍微早些時候也有同樣的迴應,雖然你們兩人都+1 – Drew 2010-05-18 05:02:25

0

它不是一個完美的解決方案, 它是 只是一個替代的解決方案,

SELECT class AS a, COUNT(child) AS b 
FROM Table1 
GROUP BY class 
UNION ALL SELECT COUNT(table1.child) AS a, Table1.class AS b 
FROM Table1 
LEFT JOIN Table2 ON Table1.child = Table2.child 
WHERE Table2.glasses = 'yes' 
GROUP BY Table1.class 

輸出是:

a b 
art  1 
math 3 
1 art 
2 math 

在這方面,我們可以得到一些想法開發出更多的東西。

0

也許該帖子是5歲,但我也是一個解決方案。

對於yes/no和true/false,使用1和0等數字對您來說更容易。

一個解決辦法是(如果你改變了是的,沒有的爲1和0):

SELECT class,  
COUNT(distinct Table1.child) AS NumbofChilds,  
SUM(Table2.glasses) AS ChildswithGlasses 

FROM Table1 INNER JOIN Table2 ON Table1.child=Table2.child 

GROUP BY class; 

語法要進行檢查,但我有我的表類似的查詢和它的作品。