SQL如何先用group by分组,并将分组的结果distinct?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL如何先用group by分组,并将分组的结果distinct?相关的知识,希望对你有一定的参考价值。

问题如下:

id tag
11 a
11 a
22 b
33 b
33 c
44 d
55 e
66 e
如何统计a、b、c、d、e五个tag下分别有多少个不重复ID呢?

以求得一下结果:
a 1
b 2
c 1
d 1
e 2

select tag, count(distinct(id)) from table_name group by tag;    mysql里执行正确

模拟数据:

操作结果:

参考技术A select tag,count(id)
from table
group by tag;追问

我只想知道每类tag下有多少个不重复的id的话,是不是应该
select tag,count(distinct id)
from table
group by tag;
呢?

因为tag a下面有两个相同的id:11

sqlserver2008,sql编程,group by 用法

参考技术A 语句中有group
by的话,说明是进行分组聚合查询,因此select后的属性只能是group
by后面的分组属性和在其它字段上的聚合函数结果(avg平均值,sum求和,count计数等),而order
by后的属性也必须是分组属性或聚合结果,因为此时是对分组后的结果进行排序。
group
by相当于对数据分组,分组属性有多少各不同的值就有多少各分组,每个分组是结果集中一条记录

以上是关于SQL如何先用group by分组,并将分组的结果distinct?的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver2008,sql编程,group by 用法

SQL中的Group By的查询过程多列分组的查询过程是怎样的?

sql group by 之后 如何合并分组的文本

sql group by 之后 如何合并分组的文本

sql:用group by分组后,每组随意取一个记录?

SQL系列—— 分组(group by)