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组合进行计数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值