除了Query2以外的两个SQL查询返回一个附加字段之间有什么区别?是否有任何可能的情况,两个查询的输出将不同(除了Query2中的附加字段)
查询1:
SELECT Field1, COUNT(*)
FROM Table1
GROUP BY Field1
HAVING COUNT(*) > 1
QUERY2:
SELECT Field1, Field2, COUNT(*)
FROM Table1
GROUP BY Field1, Field2
HAVING COUNT(*) > 1
答案 0 :(得分:4)
当然,这些是不同的。 Query2的Group By子句指定一个额外的字段。这意味着当聚合结果时,它们将聚合为Field1 AND Field2的组合唯一值。也就是说,当且仅当Field1和Field2都相等时,才聚合两个记录。
例如:
SELECT Profession, Count(*)
FROM People
GROUP BY Profession
HAVING Count(*) > 1
将返回具有相关计数的专业列表,如:
Software Developer, 10
PM, 5
Tester, 2
,而:
SELECT Profession, Gender, Count(*)
FROM People
GROUP BY Profession, Gender
HAVING Count(*) > 1
将返回按性别划分的职业列表,如:
Software Developer, Male, 5
Sofware Developer, Female, 5
PM, Male, 3
PM, Female, 2
Tester, Male, 2
使用其他要求的信息进行编辑:
您可以通过以下方式检索两种性别的职业计数:
SELECT Profession, Count(*)
FROM People
GROUP BY Profession
HAVING SUM(case Gender when 'Female' then 1 else 0 end) > 0 AND SUM(case Gender when 'Male' then 1 else 0 end) > 0
如果您还需要相关的性别计数
,它会有点毛茸茸(需要子查询)答案 1 :(得分:0)
查询2中的额外group by子句过滤记录。要了解更多信息,请参阅下面的示例。
测试数据:
id name
1 a
2 b
3 a
4 a
因此,当我按名称分组时,sql首先过滤掉名称的不同记录,如下面的查询所示
select name,sum(id)
from test
group by name
- 首先按列(此处为名称)过滤掉不同的值
a
b
- 每个不同记录的下一个,有多少值属于该类别..
a 1 a
4 a
3 a
b 2 b
所以从上面的组中,现在你可以在我们的情况下计算组中的任何聚合,它是sum,所以下一个输出会有类似的东西
a 8
b 2
从上面的输出中可以看出,你也可以计算出任何关于群组的聚合(这里是a和b值),比如在下面的组上给我数(id),len(名字)
select name,len(name),sum(id)
from test
group by name
当你按另一个字段分组时会发生同样的事情,比如说如下
select id,name
from
test
group by id,name
所以在上面的例子中,sql首先过滤id,name
的alldistinct记录1 a
2 b
3 a
4 a
下一步是获取每组的记录
groupby columns --columns which fall into this
1 a 1 a
2 b 2 b
3 a 3 a
4 a 4 a
现在你可以在上面的群体上计算aggergations。这有助于可视化你的小组。进一步逐步消除小组,在那里逐个消除记录