[英]How can I compare values in the same column for different rows?
我擁有的示例表是(不是我正在處理的實際數據,而是類似的數據):
name fruit qty
========================
John apple 1
John pear 1
John orange 2
Maggie apple 2
Maggie pear 2
Maggie pear 2
Sam apple 3
Sam pear 1
Sam orange 2
Donny apple 2
Donny pear 2
Donny orange 2
我需要 select 只有孩子,他們的水果比例為 1:1:1,以及他們擁有的水果數量。
在上面的示例中,只有 Donny 滿足要求,因此預期結果將是:
name fruit_num
=================
Donny 2
我嘗試使用更簡單的解決方案 go :
select name,sum(qty)/3 num_fruits
from table
group by name
having count(distinct fruit)=3 and sum(qty)%3=0
但這顯然會帶來一些孩子(在這種情況下是山姆)的意外結果,他們有 3 種不同的水果,他們的總數 mod 3 為 0,但口糧已關閉。
我想不出任何其他優雅的解決方案,顯然必須為每個孩子比較水果的數量,但我找不到合適的方法。
任何見解或幫助將不勝感激。 先感謝您。
如果您希望每種水果的qty
相同,則可以使用:
select f.name, count(distinct fruit) as num_fruits, sum(qty) as total_qty
from fruit f
group by f.name
having count(*) = count(distinct fruit) and -- one row per fruit
max(qty) = min(qty);
你可能需要先按水果聚合,如果你想 select 有人喜歡:
Gordon apple 2
Gordon pear 1
Gordon pear 1
然后:
select f.name, count(*) as num_fruits, sum(qty) as total_qty
from (select f.name, f.fruit, sum(qty) as qty
from fruit f
group by f.name, f.fruit
) f
group by f.name
having max(qty) = min(qty);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.