Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL分组依据:仅包括具有特定列计数的行_Mysql - Fatal编程技术网

MySQL分组依据:仅包括具有特定列计数的行

MySQL分组依据:仅包括具有特定列计数的行,mysql,Mysql,我想创建一个查询,计算包含a和B的相同值的行数,但仅当任何给定a的B出现率大于10时。换句话说,如果我的表中有11行,如下所示: 使用以下查询: 通过A、B从foos组中选择A、B、countB,按countB desc排序 我希望返回以下内容: | a | a | 10 | 更新/编辑:这里还有一个条件需要检查;对于上面给定的查询,我只希望返回的行,在A,B情况下的组_中,A出现在10多个返回行中。例如: | 1 | a | a | | 2 | a | b | | 3 | a | c

我想创建一个查询,计算包含a和B的相同值的行数,但仅当任何给定a的B出现率大于10时。换句话说,如果我的表中有11行,如下所示:

使用以下查询:

通过A、B从foos组中选择A、B、countB,按countB desc排序

我希望返回以下内容:

| a | a | 10 |
更新/编辑:这里还有一个条件需要检查;对于上面给定的查询,我只希望返回的行,在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子句中添加条件

说明:

此查询将沿着A和B相同的记录计数获取A和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) as count
from foos 
group by A, B 
having (Count>10)
order by count(B) desc;

因此,如果我理解正确,countB将只返回A和B的每个不同组合的行总数,而不计算任何其他列。因此,使用countB>10将简单地排除countB为10或更少的任何分组行?@Argus9:此查询将沿着A和B都相同的记录计数获取A和B。如果计数大于10,则只显示这些结果。这正是我需要的。非常感谢事实上,在运行查询之后,我意识到我没有充分解释我在寻找什么。实际上,我需要查询只返回任何给定A在返回行中出现10次以上的行。请参阅上面更新的描述。@Argus9:尝试使用countB>=10。尝试此答案在堆栈溢出方面价值很低,因为它们在教育/授权OP和数千名未来研究人员方面做得很差。
select A, B, count(B)
from foos
group by A, B 
having count(B) > 10
order by count(B) desc;
select A, count(B)
from foos
group by A
having count(B) > 10
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;