[英]How to get multiple fields from one criteria using SQL group by?
該查詢可能返回錯誤的名稱,因為我要查詢的名稱是每種物種中最小的動物。 我怎樣才能得到正確的a.name
SELECT
a.name,
MIN(a.size)
FROM animal a
LEFT JOIN species s ON s.idSpecies = a.idAnimal
GROUP BY s.id
一種方法是,首先找到每個物種最小的動物大小(就像您所做的那樣),盡管我假設物種永遠不會為空,因為動物必須屬於某個物種,但它也不需要加入此時的物種:
SELECT a.IDSpecies, MIN(a.Size) AS Size
FROM Animal AS a
GROUP BY a.IDSpecies
現在,您可以將該查詢的結果重新加入主查詢以過濾結果。
SELECT a.Name AS AnimalName,
a.Size,
s.Name AS SpeciesName
FROM Animal AS a
INNER JOIN Species AS s
ON s.ID = a.IDSpecies
INNER JOIN
( SELECT a.IDSpecies, MIN(a.Size) AS Size
FROM Animal AS a
GROUP BY a.IDSpecies
) AS ma
ON ma.IDSpecies = a.IDSpecies
AND ma.Size = a.Size;
另一種方法是使用NOT EXISTS
:
SELECT a.Name AS AnimalName,
a.Size,
s.Name AS SpeciesName
FROM Animal AS a
INNER JOIN Species AS s
ON s.ID = a.IDSpecies
WHERE NOT EXISTS
( SELECT 1
FROM Animal AS a2
WHERE a2.IDSpecies = a.IDSpecies
AND a2.Size < a.Size
);
因此,從一個簡單的選擇開始,然后使用NOT EXISTS
刪除任何動物,其中相同物種中存在較小的動物。
由於MySQL 比NOT EXISTS
更好地優化LEFT JOIN/IS NULL
,因此在MySQL中編寫查詢的更好方法是:
SELECT a.Name AS AnimalName,
a.Size,
s.Name AS SpeciesName
FROM Animal AS a
INNER JOIN Species AS s
ON s.ID = a.IDSpecies
LEFT JOIN Animal AS a2
ON a2.IDSpecies = a.IDSpecies
AND a2.Size < a.Size
WHERE a2.ID IS NULL;
該概念與NOT EXISTS
完全相同 ,但是不需要相關的子查詢。
以下是分組依據的簡單示例:
SELECT C.CountryName Country, SN.StateName, COUNT(CN.ID) CityCount
FROM Table_StatesName SN
JOIN Table_Countries C ON C.ID = SN.CountryID
JOIN Table_CityName CN ON CN.StateID = SN.ID
GROUP BY C.CountryName, SN.StateName ORDER BY SN.StateName
輸出:
Country StateName CityCount
Australia Australian Capital Territory 219
Australia New South Wales 2250
Australia Northern Territory 218
Australia Queensland 2250
Australia South Australia 1501
Australia Tasmania 613
Australia Victoria 2250
獲取所有大小為=最小大小的行。 使用相關子查詢器來找到最小的大小:
SELECT *
FROM animal a
LEFT JOIN species s ON s.idSpecies = a.idAnimal
where a.size = (select min(a2.size)
from animal a2
LEFT JOIN species s2 ON ss.idSpecies = as.idAnimal
where s.id = s2.id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.