问题是这样的:
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
意味着结果将根据a
和b
字段的组合进行分组。因此,HAVING COUNT(a) > 1
实际上是针对每个唯一的a
和b
组合进行计数。
如果数据中有两行如下:
a = 1, b = A
a = 1, b = B
并且执行以下查询:
SELECT a, b
FROM xxx_table
GROUP BY a, b
HAVING COUNT(a) > 1;
在这种情况下,由于a
和b
的每个组合都是唯一的,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是针对每个唯一的a
和b
组合进行计数。