2015-02-23 84 views
0

我想創建一個查詢來計算A和B中包含相同值的行數,但只有在任何給定A是> 10。換句話說,如果有11行在我的表如下:MySQL GROUP BY:只包含具有特定列數的行


| id | A | B | ... | 

| 1 | a | a | ... | 

| 2 | a | a | ... | 

| 3 | a | a | ... | 

| 4 | a | a | ... | 

| 5 | a | a | ... | 

| 6 | a | a | ... | 

| 7 | a | a | ... | 

| 8 | a | a | ... | 

| 9 | a | a | ... | 

| 10 | a | a | ... | 

| 11 | a | b | ... | 

隨着以下查詢:

選擇A,B,計數(B)從A,B有(?)按次數(B)desc的foos組;

我希望下面的返回:

| a | a | 10 | 

UPDATE /編輯:還有另外一個條件,我需要檢查在這裏;對於上面給出的查詢,我只想返回行,在GROUP_BY A, B的情況下,A出現在10多個返回的行中。因此,例如:

| 1 | a | a | 
| 2 | a | b | 
| 3 | a | c | 
| 4 | a | d | 
| 5 | a | e | 
| 6 | a | f | 
| 7 | a | g | 
| 8 | a | h | 
| 9 | a | i | 
| 10 | a | j | 
| 11 | a | k | 

回答

1

只需添加條件having條款。

select A, B, count(B) 
from foos 
group by A, B 
having count(B) > 10 
order by count(B) desc; 

說明:

這個查詢將擷取並沿其中A和B都是相同的記錄計數B中。如果計數大於10,將只顯示那些結果。

HAVING子句已添加到SQL,因爲WHERE子句不能用於聚合函數。

編輯:

如果A和B所想組,那麼它不會更新表數據。在這種情況下,你將不得不做它喜歡,

select A, count(B) 
from foos 
group by A 
having count(B) > 10 
order by count(B) desc 
+0

所以,如果我理解正確的話,'計數(B)'將只返回行的總數爲每個不同「A」和「B」的組合(不包括任何其他列)。因此,使用'count(B)> 10'將簡單地排除任何'count(B)'爲10或更少的'group'ed行? – Argus9 2015-02-23 20:13:01

+0

@ Argus9:此查詢將沿着A和B都相同的記錄計數來提取A和B.如果計數大於10,將只顯示那些結果。 – 2015-02-23 20:14:57

+0

然後這正是我所需要的。非常感謝你! :) – Argus9 2015-02-23 20:15:38

-2
select A, B, count(B) 
from foos 
where count(B) > 10 
group by A 
order by count(B) desc; 
1

試試這個:

select A, B, count(B) as count 
from foos 
group by A, B 
having (Count>10) 
order by count(B) desc;