mysql - 在 MySQL 中查找第二个最昂贵的总产品

标签 mysql aggregate-functions

我正在处理简单的查询以学习 MySQL,在我的示例数据库中,我跟踪销售电子设备的商店,我有一个表 Sells(Store, Item, Price)。

示例数据是,

'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 语句,但它说:

Error Code: 1111. Invalid use of group function 0.000 sec

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

如果你能帮助我,我将不胜感激

谢谢

最佳答案

这将直接显示第二贵的商店;

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 .

关于mysql - 在 MySQL 中查找第二个最昂贵的总产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470792/

相关文章:

mysql - MySQL 中的 JOIN 查询产生错误的结果

mysql - SQL获取特定用户类型的最后回复

php - 数据库匹配算法

mysql - 如何解决Hibernate "ERROR o.h.e.jdbc.spi.SqlExceptionHelper - Duplicate entry "异常

javascript - 使用 jquery 和 ajax 隐藏基于 db 的某些结果

python pandas时间序列计数之前匹配的数量

mysql - SQL 仅选择列上具有最大值的行

mysql - 每隔 30 天生成一次报告,每日总计

php - MYSQL查询每小时

postgresql - Postgres - 基于列值的不同聚合