[英]select max from multiple columns mysql with corresponding column value
[英]Select MAX value from column and corresponding value from another
這可能是一個相對簡單的問題,但我正在努力解決。 我下面列出了三個表( owners, pets, petTypes
),並試圖在一個查詢中提取以下數據。 前兩個並不難,但是第三和第四是我努力的地方。
如果要復制表數據: https : //pastebin.com/veXHwcMc
問題:
擁有者編號
所有者名稱
我嘗試過的
選擇年齡SELECT MAX(age) FROM pets
SELECT pets.ownerId, MAX(pets.age), petTypes.name FROM pets INNER JOIN petTypes ON pets.petTypeId = petTypes.id GROUP BY pets.ownerId;
表以同時顯示SELECT pets.ownerId, MAX(pets.age), petTypes.name FROM pets INNER JOIN petTypes ON pets.petTypeId = petTypes.id GROUP BY pets.ownerId;
但這是錯誤的。 因為它們都在顯示貓的時候應該為最老的貓顯示正確的名稱。
我想到了這個問題: 如何在SQL中用另一列選擇MAX(列值),DISTINCT來選擇行?
所以我嘗試了: SELECT petTypes.id, petTypes.name FROM petTypes INNER JOIN (SELECT MAX(age) FROM pets GROUP BY ownerId) pets ON petTypes.id = pets.petTypeId;
但是引發的錯誤是ERROR 1054 (42S22): Unknown column 'petTypes.id' in 'on clause'
任何幫助請
SELECT O.ID, O.FirstName, O.LastName, P.Age, min(PT.Name) as TypeName, OPets.CntOfOtherPets
FROM Owners O
INNER JOIN (SELECT OwnerID, max(Age) MA, count(*)-1 as CntOfOtherPets
FROM Pets
GROUP BY OwnerID) OPets
on OPets.OwnerID = O.ID
INNER JOIN Pets P
on P.Age = OPets.MA
and P.OwnerID = OPets.OwnerID
INNER JOIN PetTypes PT
on P.PetTypeID = PT.ID
GROUP BY O.ID, O.FirstName, O.LastName, P.Age, OPets.CntOfOtherPets ;
派生表OPets通過所有者減去1得到所有寵物的計數,因為我們知道這代表“其他寵物”計數。 寵物的最大年齡可通過匯總分組的所有者返回。 通過將此數據集重新加入寵物集,我們只能獲得擁有最大年齡的那個主人的寵物。 然后,我們加入petType以獲取該類型寵物的名稱(如果多個寵物共享相同的最大年齡,則為寵物)。
最后,對除PT.Name以外的所有字段進行分組,然后選擇min(PetType.Name)。 這樣,如果存在多個具有相同最老年齡的動物,我們將按字母順序從最早的名字中選擇具有TypeName的動物。 僅在返回數據的情況下,此方法才有效。 如果必須返回寵物名或寵物ID,則需要使用其他方法。 但這是迄今為止獲得所需結果(返回的列)的最簡單方法
count-1似乎有點駭人聽聞,因為count(*)返回所有寵物的數量-1只是減去了我們對#5要求擁有的寵物1: 其他寵物的數量。 即使在年齡關系上,這個#也是正確的。 由於count-1將永遠是“其他寵物”
這應該可以,不能測試,但是如果主人有兩個或更多相同年齡的寵物,它將顯示多個記錄。
Select ow.Firstname, ow.lastname ,petinfo.Age, petinfo.Name, petcount.TotalPets
from #owners ow
join ( Select age, p.petTypeId, p.OwnerID, pt.name From
(select max(age) as age, petTypeId, OwnerID
from #pets p
Group by OwnerID,petTypeId
) p
Join #petTypes pt on pt.ID = p.petTypeId
) petinfo
on petinfo.OwnerID = ow.id
Join (
Select Count(*) TotalPets, ownerID
From #Pets
group by OwnerID
) petcount
on petcount.ownerID = ow.ID
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.