Vam*_*msi 14 sql-server group-by distinct
在SQL中使用DISTINCT和GROUP BY有什么目的吗?
下面是一个示例代码
SELECT DISTINCT Actors
FROM MovieDetails
GROUP BY Actors
Run Code Online (Sandbox Code Playgroud)
有没有人知道需要使用DISTINCT和GROUP BY的任何情况,以获得任何特定的预期结果?
(分别理解DISTINCT和GROUP BY的一般用法)
Luk*_*der 17
DISTINCT删除重复项GROUPING SETSGROUP BY在GROUPING SETS()一般使用的完全愚蠢的示例(或特殊分组集ROLLUP()或CUBE()特别是)中,您可以使用DISTINCT以便再次删除由分组集生成的重复值:
SELECT DISTINCT actors
FROM (VALUES('a'), ('a'), ('b'), ('b')) t(actors)
GROUP BY CUBE(actors, actors)
Run Code Online (Sandbox Code Playgroud)
用DISTINCT:
actors
------
NULL
a
b
Run Code Online (Sandbox Code Playgroud)
没有DISTINCT:
actors
------
a
b
NULL
a
b
a
b
Run Code Online (Sandbox Code Playgroud)
但是,为什么除了提出学术观点之外,你会这样做吗?
DISTINCT以找到独特的聚合函数值在一个不太牵强的例子中,您可能对DISTINCT聚合值感兴趣,例如,有多少不同的演员重复数?
SELECT DISTINCT COUNT(*)
FROM (VALUES('a'), ('a'), ('b'), ('b')) t(actors)
GROUP BY actors
Run Code Online (Sandbox Code Playgroud)
回答:
count
-----
2
Run Code Online (Sandbox Code Playgroud)
DISTINCT与一个以上的删除重复GROUP BY列当然,另一个案例就是这样一个案例:
SELECT DISTINCT actors, COUNT(*)
FROM (VALUES('a', 1), ('a', 1), ('b', 1), ('b', 2)) t(actors, id)
GROUP BY actors, id
Run Code Online (Sandbox Code Playgroud)
用DISTINCT:
actors count
-------------
a 2
b 1
Run Code Online (Sandbox Code Playgroud)
没有DISTINCT:
actors count
-------------
a 2
b 1
b 1
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,我写了一些博客文章,例如关于GROUPING SETS它们如何影响GROUP BY操作,或者关于SQL操作的逻辑顺序(与操作的词法顺序相反).
我会在 a 中进行分组subselect,然后在 select 语句中采用不同的值:
SELECT DISTINCT *
FROM ( SELECT Actors
FROM MovieDetails
GROUP BY Actors
) d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81053 次 |
| 最近记录: |