【发布时间】:2019-06-01 05:26:32
【问题描述】:
我正在查看我在 Access 数据库中的一些我没有创建的 SQL 查询。
其中一个 SQL 查询如下所示:
select column1 from table1 group by column1 having count(*)>1
此查询的目的是查找column1 中出现多次的值。我可以验证此查询是否正常工作并返回多次出现的列值。
但是我不明白为什么这个查询有效。根据我的理解,使用 group by 将删除重复的字段。例如,如果 column1 有
column1
apple
mango
mango
执行group by (column1) 将导致
column1
apple
mango
此时,如果我们执行having count(*)>1 或having count(column1)>1,它应该不会返回任何结果,因为 group by 已经删除了重复字段。但很明显,我错了,因为上面的 SQL 语句确实给出了准确的结果。
您能告诉我我理解的问题吗?
编辑 1:
除了公认的答案,我this处理SQL操作顺序的文章确实帮助我理解了
【问题讨论】:
-
Having 子句适用于由于分组而形成的行组。分组的结果是苹果和芒果两组。在这些组中的每一个上,我们都运行 having 子句。苹果组有 1 行,芒果有 2 行。这就是它的工作原理
-
HAVING 标准将只返回 Mango 行,因为它是唯一一个计数 >1 的组。
标签: sql ms-access select group-by