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