[英]How do I group by minimum values in a SQL query?
我在使用SQL聚合技術時遇到了麻煩。 請考慮下表:
Image
-----
id (auto generated image id)
property_id (foreign key)
image_url (text)
image_priority (int)
我想要一個具有最低優先級的圖像URL列表(每個屬性的一個圖像)。 換句話說,每個屬性最流行的圖像(最受歡迎,因為它具有最低優先級)。
property_id | id | url
----------------------
1 | 17 | awesome.png
2 | 23 | best.png
這是我失敗的嘗試:
SELECT id, property_id, url
FROM image
group by property_id
having priority = min(priority)
使用distinct on
:
select distinct on (property_id) id, property_id, image_url
from image
order by property_id, image_priority;
對於文檔 :
SELECT DISTINCT ON(expression [,...])僅保留給定表達式求值的每組行的第一行。 (...)請注意,每個集合的“第一行”是不可預測的,除非使用ORDER BY確保首先出現所需的行。
在子選擇中,您可以使用ROW_NUMBER()獲得增加的值,該值隨每個image_url重新啟動並按優先級排序。 然后只需選擇值為1的那些。
select *
from (
select I.*,
ROW_NUMBER() OVER (PARTITION BY image_url ORDER BY impage_priority ASC) as ord
from Image as I
) sub
where ord = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.