簡體   English   中英

如何比較同一列中不同行的值?

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

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