2012-02-27 31 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