Group by和Having如何运作

时间:2015-12-16 10:38:48

标签: sql group-by

我是SQL新手,在编写了一些查询后,我想了解SQL如何“内部”处理查询。我从stackoverflow中的另一篇文章中获取一个查询:

select name from contacts
group by name
having count(*) > 1

我的问题是:按名称分组将所有具有相同名称的行合并为一行,然后如何统计知道合并了多少具有相同名称的行。我试图拆分查询处理中的所有步骤,以了解它是如何工作的,但在这种情况下,似乎你不能拆分它。提前谢谢。

1 个答案:

答案 0 :(得分:1)

从您在那里显示的SQL查询 执行顺序将如下所示

from contacts

知道您获得了哪些表格数据,接下来将是您的WHERE条款,但在这种情况下,您没有条款,因此将按照下一步操作

group by name

将所有相同的名称分组到一行记录。

旁注:现在SELECT语句尚未运行,因此当HAVING语句运行时可以计算同名的行

接下来是你的

having count(*) > 1

过滤掉所有超过1的记录,最后将是SELECT

select name
上面的

是显示示例的执行顺序。

这些是sql查询的完整序列

1. FROM
2. ON
3. OUTER
4. WHERE
5. GROUP BY
6. CUBE | ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP

希望它能帮到你。