2017-02-03 111 views
0

我可以使用特定列中某個字符的實例數來計算列嗎?具有嵌套子查詢的COUNT()

+---+---+ 
| i | p | 
+---+---+ 
| A | 3 | 
| B | 3 | 
| C | 0 | 
| A | 1 | 
| B | 1 | 
| C | 3 | 
| A | 1 | 
| B | 0 | 
| C | 0 | 
+---+---+ 

查詢:

SELECT i, SUM(p) AS Sp, COUNT(p) AS Cp FROM table 
GROUP BY i 

我還想得到這樣的:

+---+----+----+-----+-----+-----+ 
| i | Sp | Cp | x3x | x1x | x0x | 
+---+----+----+-----+-----+-----+ 
| A | 5 | 3 | 1 | 2 | 0 | 
| B | 4 | 3 | 1 | 1 | 0 | 
| C | 4 | 3 | 1 | 0 | 2 | 
+---+----+----+-----+-----+-----+ 

基本上我想算的3,0或1的情況下,在該列分組列由id'我'

我試過這個以及一些變化,但我似乎無法得到它。 COUNT(P WHERE p='3')COUNT(P WHERE p='1')COUNT(P WHERE p='0')

是否存在被我可以放置一個COUNT(),我在我的研究已經錯過了內的子查詢的手段?

我也試過

COUNT(Points='3')COUNT(='1')COUNT(Points='0')

回答

2

你接近:在這種情況下

select i, sum(points), count(*), 
     sum(Points = 3), sum(points = 1), sum(Points = 0) 
from t 
group by i; 

一個次要區別在於,去掉周圍的值的單引號。與數字比較時,請勿使用單引號。只對字符串和日期常量使用單引號。

更重要的變化是從count()sum()count()計算非NULL值的數量。那麼,布爾表達式是真或假 - 但不是真的NULL(除非pointsNULL,這與您的數據不一樣)。

MySQL將布爾值視爲數值上下文中的整數,其中0代表假,1代表真。所以,把它們加起來就是指事情成立的次數。

+0

如此接近在這麼遠的地方這個作品,謝謝。我的邏輯是COUNT,但是如果我要將上面的內容拼湊起來,它會是SUM(點數= 3)等的實例數量是多少? – denski

+0

很酷謝謝你。我想我需要改變問題的標題。 – denski