Mysql 的HAVING子句中COUNT(a)的统计范围

问题是这样的

1.对于a、b两个字段,需要按照a进行分组(Group by a),要返回分组后count(a)>1的a和b两个字段,一条sql解决?

2.如果以及Group by a,b,多个字段 HAVING count(a)>1是怎么统计count(a)的数据的?

在使用GROUP BY语句时,HAVING子句中的COUNT(a)函数是针对每个由GROUP BY指定的字段组合进行统计的。在问题中,GROUP BY a, b意味着结果将根据ab字段的组合进行分组。因此,HAVING COUNT(a) > 1实际上是针对每个唯一的ab组合进行计数

如果数据中有两行如下:

a = 1, b = A
a = 1, b = B

并且执行以下查询:

SELECT a, b
FROM xxx_table
GROUP BY a, b
HAVING COUNT(a) > 1;

在这种情况下,由于ab的每个组合都是唯一的,COUNT(a)对于每个组合都将是1。因此,没有任何组合会满足HAVING COUNT(a) > 1的条件,结果将是空集。

如果您想要根据a字段的值对数据进行分组,而不考虑b字段,您应该只在GROUP BY子句中包含a,然后使用HAVING子句来筛选计数:

SELECT a, COUNT(a) as count_a
FROM your_table
GROUP BY a
HAVING COUNT(a) > 1;

这个查询将返回那些a字段的值出现超过一次的所有a的值及其出现的次数。如果您还想返回b字段的值,您需要考虑如何处理多个b值的情况,因为每个a可能对应多个b。您可以使用聚合函数(如GROUP_CONCAT())来列出所有相关的b值,例如:

SELECT a, GROUP_CONCAT(b) as b_values
FROM your_table
GROUP BY a
HAVING COUNT(a) > 1;

这个查询将返回每个a值及其对应的所有b值的列表(以逗号分隔)。

结论

Group by a,b,多个字段 HAVING count(a)>1是针对每个唯一的ab组合进行计数

相关推荐
搬码后生仔4 分钟前
SQLite 是一个轻量级的嵌入式数据库,不需要安装服务器,直接使用文件即可。
数据库·sqlite
码农君莫笑6 分钟前
Blazor项目中使用EF读写 SQLite 数据库
linux·数据库·sqlite·c#·.netcore·人机交互·visual studio
江上挽风&sty8 分钟前
【Django篇】--动手实践Django基础知识
数据库·django·sqlite
奥顺互联V9 分钟前
一次性部署:使用Docker部署PHP应用
大数据·mysql·开源·php
张伯毅11 分钟前
Flink SQL 支持 kafka 开启 kerberos 权限控制.
sql·flink·kafka
向阳121812 分钟前
mybatis 动态 SQL
数据库·sql·mybatis
胡图蛋.13 分钟前
什么是事务
数据库
小黄人软件15 分钟前
20241220流水的日报 mysql的between可以用于字符串 sql 所有老日期的,保留最新日期
数据库·sql·mysql
青莳吖18 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
张声录120 分钟前
【ETCD】【实操篇(三)】【ETCDCTL】如何向集群中写入数据
数据库·chrome·etcd