簡體   English   中英

獲取每個不同列A具有另一列B的最大值的行

[英]Get the row of each different column A with highest value for another column B

我知道標題有點亂,但是我現在將問題顯示為黑色。

我有一張這樣的桌子:

CREATE TABLE items (
    item_id int primary key,
    item_type int,
    item_value int
);

實際的表有些不同,但是為了便於理解,這是一個簡化的版本。

現在,我想在SELECT查詢中得到的是每種不同item_type的item_value最大的對象。

我已經嘗試過類似的東西:

SELECT item_id, 
       item_type, 
       item_value 
FROM   items 
GROUP  BY item_type 
ORDER  BY item_value DESC; 

這似乎可以解決問題,但是要花很長時間才能運行,而且我認為這絕對不是最佳選擇。 為此,對每種類型執行一次查詢會更快,但是我想知道是否有一種方法可以只對一個帶有聯接的查詢執行相同的操作。

在此先多謝!

標准SQL禁止這樣做,但是在SQLite 3.7.11或更高版本中,您可以使用MAX()從組中選擇一行:

SELECT item_id,
       item_type,
       MAX(item_value) AS item_value
FROM items
GROUP BY item_type;

為了使此查詢高效,您需要在item_type列上建立索引。

CL提出的查詢似乎花費了與我相同的時間(以.time度量),盡管對我而言,他的查詢比我的查詢更清晰。

對於兩個查詢中的任何一個,僅對item_type進行索引似乎沒有什么區別,最終有效的方法是使用三列創建索引,例如:

CREATE INDEX idx_items_tvi ON items(item_type, item_value, item_id)

在那之后,速度提高了很多(從大約三秒鍾縮短到僅第二秒鍾的雞只幼體的一半)。

暫無
暫無

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

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