2012-02-27 83 views
1

我正在研究簡單的查詢以學習MySQL,在我的示例數據庫中,我跟蹤銷售電子設備的商店,我有一個表Sells(Store,Item,Price) 。查找MySQL中第二個最昂貴的總產品

而且示例數據是,

'Best Buy', 'Galaxy S', 1000 
'Buy More', 'Macbook Air', 2000 
'Best Buy', 'Microsoft Mouse', 20 
'Best Buy', 'Macbook Pro Cover', 40 
'Buy More', 'Asus Zenbook', 2000 

等等..

我嘗試下面的SQL語句,但它說:

錯誤代碼:1111使用無效組功能0.000秒

SELECT store 
FROM sells 
WHERE SUM(price) < 
     (SELECT SUM(price) AS total 
     FROM sells 
     GROUP BY store 
     ORDER BY total DESC 
     LIMIT 1) 
GROUP BY store 
ORDER BY SUM(price) DESC 

我將不勝感激,如果你能幫助我

感謝

+0

不知道我明白,你只是想總結一家商店的所有價格,而不是關心實際銷售的產品? – 2012-02-27 19:14:38

+0

要小心,您提出的查詢似乎是有效的,下次執行它時,結果可能會有所不同。但是,您的問題與常見的最大每組問題類似,但並不完全。 – AndreKR 2012-02-27 19:14:58

+0

@JoachimIsaksson是的,我只想總結每個商店的所有價格,然後對它們進行排名。 – CanCeylan 2012-02-27 19:16:29

回答

4

這只是顯示第二個最昂貴的商店;

SELECT STORE 
FROM TABLE_A 
GROUP BY STORE 
ORDER BY SUM(PRICE) DESC 
LIMIT 1,1 

演示here

如果您希望顯示的價格也可以選擇,

SELECT STORE, SUM(PRICE) TOTAL_PRICE 
FROM TABLE_A 
GROUP BY STORE 
ORDER BY TOTAL_PRICE DESC 
LIMIT 1,1 

演示here

編輯:如果你有幾個最昂貴的商店和幾個第二最昂貴的商店,查詢所有第二個最昂貴的商店變得更加複雜;我相信有人能夠超越這個效率。

SELECT STORE, SUM(PRICE) TOTAL_PRICE 
FROM TABLE_A 
GROUP BY STORE 
HAVING TOTAL_PRICE = 
    (SELECT SUM(PRICE) TMP 
    FROM TABLE_A 
    GROUP BY STORE 
    HAVING TMP < 
    (SELECT SUM(PRICE) TMP2 
     FROM TABLE_A 
     GROUP BY STORE 
     ORDER BY TMP2 DESC 
     LIMIT 1) 
    ORDER BY TMP DESC LIMIT 1) 

演示here

+0

首先感謝! LIMIT 1,1有什麼作用?我試圖寫另一個子查詢這是總的最大總,但比中最大的一個 – CanCeylan 2012-02-27 19:27:52

+0

@CanCeylan極限X1更小的,y表示跳過第一個X線(X最昂貴的),並返回接下來在y。換句話說,在這種情況下,跳過最昂貴的商店,並返回第二個最昂貴的商店。 – 2012-02-27 19:31:10

+0

但是在這種情況下,例如,如果我有兩個總數相等的商店,我不會讓他們中的兩個合適嗎? – CanCeylan 2012-02-27 19:32:58

0

SELECT distinct price from sells ORDER BY price DESC,並在代碼中,只取第二個。

如果您需要的信息的其餘部分,這樣做:

SELECT * from sells 
WHERE price = (SELECT distinct price from sells ORDER BY price DESC LIMIT 1,1) 
0

沒有測試,但應該工作

SELECT S.store 
FROM (
SELECT SUM(T.price) AS sum_price 
FROM formList_Total AS T 
GROUP BY T.store 
) AS S 
ORDER BY sum_price DESC 
LIMIT 1 , 1 

對不起,去測試,這裏就是我結束了。

+0

但是我想總結每個商店的所有價格,你如何計算它們的總和? – CanCeylan 2012-02-27 19:18:41

+0

那裏,不好意思,看錯 – 2012-02-27 20:01:21

+0

它說,「錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「GROUP BY商店正確的語法手冊」 – CanCeylan 2012-02-27 20:06:47

1

你可以這樣做;

SELECT *, 
SUM(price) AS totalprice 
FROM sells 
GROUP BY store 
ORDER BY totalprice DESC 
LIMIT 2 

您首先選擇價格的總和並將其臨時存儲在前。總價,然後就像你已經做了一組一店。爲了讓最昂貴的商店向後訂購總和,然後限制爲僅兩個結果。

您將能夠獲得totalprice只是作爲一個普通的列當你循環出來的結果

1

幾乎是正確的,

SELECT SUM(price) as price_total FROM sells GROUP BY store 
如果您想訂購你所能做的子查詢,像

SELECT price_total FROM (SELECT SUM(price) as price_total FROM sells GROUP BY store) as res ORDER BY price LIMIT 2 
如果你想利用第二個你可能會再次查詢,但我認爲這是更好地利用你的後端語言

+0

你能請看看編輯? – CanCeylan 2012-02-27 19:42:41