簡體   English   中英

兩個SQL查詢的輸出差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM