簡體   English   中英

如何按SQL查詢中的最小值進行分組?

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

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