2011-09-15 25 views
0

此表的標識組...使用通過並返回該行

id type food  price 
-------------------------- 
1 veg carrot 10  
2 veg turnip 11 
3 fruit bramble 6 
4 fruit rasp  4 
5 fruit current 9 
... 

我可以回到最昂貴的食品的價格最高爲每食品種類是這樣的...

select max(price) from tableName group by type; 

但我想返回包含每種食物類型的最昂貴食物的每行的ID號。每種食物類型只返回一行。即返回此....

id 
---- 
2 
5 
... 

這是我真正的問題的簡化版本。

+0

你試過我的解決方案嗎? –

回答

1
SELECT id 
FROM (SELECT id, type 
     FROM table 
     ORDER BY price DESC) AS h 
GROUP BY type 
+0

謝謝。這一點修改後確實工作: SELECT ID FROM(SELECT類型,ID FROM表名 按價格排序DESC)爲TBL1 GROUP BY – spiderplant0

+0

型然而,正如上述依賴於MySQL的選擇組中的第一個條目,我不確定這是否非常可靠,正如它在MySql文檔中所說的那樣... 「服務器可以自由選擇每個組中的任何值,因此除非它們相同,否則所選值是不確定的。」 – spiderplant0

+0

對不起,我忘了聲明表:)分組時,它默認爲第一行。在這種情況下,按價格desc排序的行。我從來沒有見過這樣的其他行爲。 –

0
SELECT max(id) from 
(SELECT t1.* FROM tableName t1 
JOIN (SELECT type, max(price) AS price FROM tableName GROUP BY type) t2 
ON t2.type = t1.type AND t2.price = t1.price) t3 
GROUP BY userId; 
+0

謝謝。那工作。 – spiderplant0

+0

正確。它不起作用。如果兩種食物類型具有相同的價格,它將返回兩排以上。每種食物類型只需要一行。 – spiderplant0

+0

你的意思是有像(2,veg,蕪菁,11),(3,veg,蕪菁,11),(4,veg,蕪菁,11)等等行嗎?如果是這樣,那麼現在決定選擇哪個ID的標準是什麼?如果有的話,那麼你可以通過上面的查詢運行一個選擇max ...組。 – Oceanic

0

當更多的食物有相同的類型和價格這可怕的查詢將正常工作。
我幾乎不會在生產中使用它,因爲這是不可維護的。

SELECT MIN(id) AS id 
FROM (
    SELECT t.id AS id, t.type 
    FROM tableName t 
    JOIN (
     SELECT MAX(price) AS m, type 
     FROM tableName 
     GROUP BY type 
    ) sub 
     ON sub.m=t.price AND sub.type=t.type 
    ORDER BY id 
) whatever 
GROUP BY type 
+0

工作 - 謝謝 – spiderplant0

相關問題