2012-09-26 179 views
6

我的問題與SQL select Group query類似。但架構有變化,我想要下面提到的不同結果。給定鏈接的解決方案並不能給我適當的解決方案。你可以使用SQL fiddle來解決這個問題。需要SQL選擇查詢幫助

下面是我的表

表1

+--------+----------+---------+ 
| amount | make  | product | 
+--------+----------+---------+ 
| 100 | Nokia | Mobiles | 
| 300 | Samesung | Mobiles | 
| 700 | Micromax | Mobiles | 
| 1000 | Karbonn | Mobiles | 
| 300 | Lava  | Mobiles | 
| 100 | Floyer | Gift | 
| 500 | Arichies | Gift | 
| 300 | Feeling | Gift | 
+--------+----------+---------+ 

現在我想顯示的兩個最低金額爲每個產品,如果其含量是相同的,然後根據上升使列的字母順序的人.. 。

所以我想建立一個SQL查詢,給了我如下導致..

+--------+----------+---------+ 
| amount | make  | product | 
+--------+----------+---------+ 
| 100 | Nokia | Mobiles | 
| 300 | Lava  | Mobiles | 
| 100 | Floyer | Gift | 
| 300 | Feeling | Gift | 
+--------+----------+---------+ 

請幫助我建立這樣的查詢..

+0

可能重複[MySQL的:使用LIMIT GROUP BY內,讓每N組結果](http://stackoverflow.com/questions/2129693/MySQL的-使用限制-內基團的通過對獲得正結果的每個組)。通過[鏈接]查看接受的答案(http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in -sql /)。 – shahkalpesh

回答

1

這應該可以幫助你..

首先一個有一個bug,我t現在更新。

SELECT t.* 
FROM (
    SELECT @lim := 2, 
      @cg := '' 
    ) vars, 
    (select * from Table1 order by product,amount, make) t 
WHERE CASE WHEN @cg <> product THEN @r := @lim ELSE 1 END > 0 
    AND (@r := @r - 1) >= 0 
    AND (@cg := product) IS NOT NULL 
ORDER BY 
    product,amount, make 

有它的樂趣,並與小提琴手: http://sqlfiddle.com/#!2/bdd1a/115/0

+0

工作正常,請你簡單解釋一下q或2句 – mahesh

+0

它有一個bug,現在好了。無論如何,這是一個對row_number()over(partition by by order by .. of oracle或mssql)的實現。如何使用它的一個很好的解釋,你可以在這裏找到http://explainextended.com/2009/03/05/row-sampling/ –

0

試試這個:

select * from table1 ORDER BY amount DESC LIMIT 2; 
+0

不幸的是,這並沒有解決每組獲得2行的問題,它會返回2行共 – Darkzaelus

+0

這隻會返回2組,你完全錯誤的問題! – ssilas777

0
SELECT amount, make,product 
FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY product ORDER BY amount) AS RowID,* 
    FROM Table1) RESULT 
WHERE RowID <= 2 

這個效果很好的PostgreSQL, MySQL不支持窗口函數,通過讓類似的工作在MySQL窗口函數refer

+0

給出錯誤:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'(分區BY產品ORDER BY金額)AS RowID,* FROM Table1中使用正確的語法'RESULT WHERE R'第3行:SELECT amount,make,product FROM(SELECT ROW_NUMBER()OVER(分區BY產品ORDER BY量)AS RowID,* FROM Table1)RESULT WHERE RowID <= 2 – mahesh

+0

哦..它和PostgreSQL很好地合作, – solaimuruganv

+0

呀.. mysql的人應該真的開始在他們的實施上乾淨的東西發動機也。 –