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
答
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;
所以,如果我理解正确的话,'计数(B)'将只返回行的总数为每个不同“A”和“B”的组合(不包括任何其他列)。因此,使用'count(B)> 10'将简单地排除任何'count(B)'为10或更少的'group'ed行? – Argus9 2015-02-23 20:13:01
@ Argus9:此查询将沿着A和B都相同的记录计数来提取A和B.如果计数大于10,将只显示那些结果。 – 2015-02-23 20:14:57
然后这正是我所需要的。非常感谢你! :) – Argus9 2015-02-23 20:15:38