[英]Difference in output from two SQL queries
除了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
當然,這些是不同的。 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
如果您還需要關聯的性別計數,則會有點毛茸茸(需要子查詢)
查詢2中的額外group by子句會過濾記錄。要了解更多信息,請看下面的示例。
測試數據:
id name
1 a
2 b
3 a
4 a
因此,當我說按名稱分組時,sql首先會過濾掉名稱的不同記錄,如下所示,下面的查詢
select name,sum(id)
from test
group by name
--first篩選出不同的值以按列分組(此處為名稱)
a
b
-接下來是每個不同的記錄,該分類中有多少個值。
a 1 a
4 a
3 a
b 2 b
因此,從上面的組中,現在您可以在本例中計算該組上的任何聚合,它是求和,因此下一個輸出將是這樣的
a 8
b 2
從上面的輸出中可以看到,您還可以計算組上的任何聚合(此處為a和b值),例如像下面這樣給我count(id),len(name)
select name,len(name),sum(id)
from test
group by name
當您按另一個字段分組時,也會發生相同的情況,如下所示
select id,name
from
test
group by id,name
因此,在上述情況下,sql首先為id,name過濾所有不同的記錄
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
現在您可以計算上述分組的變幅。希望這有助於可視化分組依據。進一步擁有將在逐階段刪除分組,而在逐階段刪除記錄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.