Sha*_*ngh 13
重复
这里已经讨论过了
如果还想在这里听
那么group by和distinct有自己的用途.
Distinct用于从满足查询条件的记录中过滤唯一记录.
Group by子句用于对触发聚合函数的数据进行分组,并根据group by子句中的列返回输出.它有自己的限制,例如,除了聚合函数之外,select查询中的所有列都必须是Group by子句的一部分.
因此,尽管您可以使用distinct和group by子句返回相同的数据,但最好使用distinct.请参阅以下示例
select col1,col2,col3,col4,col5,col6,col7,col8,col9 from table group by col1,col2,col3,col4,col5,col6,col7,col8,col9
Run Code Online (Sandbox Code Playgroud)
可写成
select distinct col1,col2,col3,col4,col5,col6,col7,col8,col9 from table
Run Code Online (Sandbox Code Playgroud)
当您在选择列表中有更多列时,它会让您的生活更轻松.但与此同时,如果您需要显示sum(col10)以及上面的列,则必须使用Group By.在那种情况下,distinct不起作用.
例如
select col1,col2,col3,col4,col5,col6,col7,col8,col9,sum(col10) from table group by col1,col2,col3,col4,col5,col6,col7,col8,col9
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
DISTINCT仅适用于整行.不要误导思维SELECT DISTINCT(A), B做不同的事情.这相当于SELECT DISTINCT A, B.
另一方面,GROUP BY创建一个组,其中包含在单个列(或多个列或任意表达式)中共享每个不同值的所有行.使用GROUP BY您可以使用诸如COUNT和之类的聚合函数MAX.这是不可能的DISTINCT.
DISTINCT.GROUP BY.另一个仅适用于MySQL的区别是,除非另有说明,否则GROUP BY也暗示了一个ORDER BY.以下是使用时可能发生的情况DISTINCT:
SELECT DISTINCT a FROM table1
Run Code Online (Sandbox Code Playgroud)
结果:
2 1
但使用GROUP BY结果将按排序顺序排列:
SELECT a FROM table1 GROUP BY a
Run Code Online (Sandbox Code Playgroud)
结果:
1 2
由于缺少分类使用DISTINCT,在您可以使用任何一种情况下更快.注意:如果您不需要进行排序,GROUP BY可以添加ORDER BY NULL以提高性能.
| 归档时间: |
|
| 查看次数: |
24277 次 |
| 最近记录: |