簡體   English   中英

如何按結果表從組中僅選擇一組行?

[英]How to select only one set of rows from a group by result table?

我從我的查詢中得到一個這樣的表

     table(name, working, office, hours)
     John T officeA 100
     John F officeA 50
     Bob  T officeA 60
     Bob  F officeA 75
     Carl F officeA 60
     Pete T officeA 80
     Pete F officeA 90

我希望表格只顯示同一個人的小時數更長的行,如下所示:

 table(name, working, office, hours)
     John T officeA 100        
     Bob  F officeA 75
     Carl F officeA 60         
     Pete F officeA 90

還必須顯示每個名稱只有一個條目的行,因此不能像“Carl”那樣進行大於比較

我的查詢是這樣的。 表 2 具有相加的小時值。

SELECT name, working, office, sum(hour) as hours
FROM table1 as t1
INNER JOIN table2 as t2 USING (a)
INNER JOIN table3 as t3 USING (x, y, z)
INNER JOIN table4 as tf USING (b, c)
group by name, office, working

有什么建議嗎? 謝謝。

使用DISTINCT ON

SELECT DISTINCT ON (name) name, working, office, sum(hour) as hours
FROM table1 t1 JOIN
     table2 t2
     USING (a) JOIN
     table3 t3
     USING (x, y, z) JOIN
     table4 tf 
     USING (b, c)
GROUP BY name, office, working
ORDER BY name, sum(hour) DESC;

DISTINCT ON是一個方便的 Postgres 擴展。 它在選擇中為每個鍵返回一行。 一行由ORDER BY確定。

您是否正在尋找每個名稱的小時數最多的行? 在那種情況下,我會添加一個排名函數。 在相同的輸出上,您可以運行類似 -

select name, 
working,
office,
working_hours
rank() over (partition by name order by working_hours desc) as rank_column
from your_output

然后你可以過濾 rank_column = 1 你也可以試試 row_number。 取決於用例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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