MySQL GROUP BY:只包含具有特定列数的行

问题描述:

我想创建一个查询来计算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 | 

只需添加条件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

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

试试这个:

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