mySQL-获取两个最常见的项目

mySQL-获取两个最常见的项目,mysql,database,phpmyadmin,Mysql,Database,Phpmyadmin,您好,我有一个名为items的表,如下所示: items table itemname | itemprice --------------------- orange | 0.50 pear | 0.40 apple | 0.40 banana | 0.75 我还有一个记录每次销售的表格: sales table date | itemname | qty --------------------- 17/12/13 | orange | 4 22/12

您好,我有一个名为items的表,如下所示:

items table

itemname | itemprice
---------------------
orange   | 0.50
pear     | 0.40
apple    | 0.40
banana   | 0.75
我还有一个记录每次销售的表格:

sales table

date     | itemname | qty
---------------------
17/12/13 | orange   | 4
22/12/13 | banana   | 6
23/12/13 | banana   | 2
29/12/13 | pear     | 3
02/01/14 | orange   | 2
05/01/14 | pear     | 6
05/01/14 | banana   | 5
06/01/14 | apple    | 2
我想做的是得到最畅销的两件商品的商品名称和价格。因此,查询应返回:

itemname | itemprice
---------------------
banana   | 0.70
pear     | 0.40
我可以得到两个最常见的项目,但这是错误的,因为需要考虑数量,而不是销售表中项目名称的频率

SELECT i.itemname, i.itemprice
FROM items i
JOIN sales s ON i.itemname = s.itemname
GROUP BY s.itemname
ORDER BY SUM(s.qty) DESC
LIMIT 2

如果要符合ANSI标准,请将“分组依据”更改为

GROUP BY i.itemname, i.itemprice

我强烈建议不要使用非ANSI
GROUP BY
syntax@FreshPrinceOfSO好的,你能解释一下为什么吗?@FreshPrinceOfSO我希望你能解释一下为什么你个人不使用它。是的,这违反了ANSI标准。但你认为它的缺点是什么?你发布的链接并没有真正说明为什么它会不好。更多的是人们在争论为什么MySQL会违反ANSI标准。只要您了解MySQL正在做什么,并且无法预测/控制非聚合字段的值(在本例中您不需要这样做),我所看到的唯一的缺点是,它可能会产生一个可移植性问题。使用特定于平台的功能无法保证实际聚合哪些列,这是一种糟糕的做法。如果这还不够,那么可移植性就是一个大问题。如果移动到MySQL以外的任何平台,是否要重写查询?感谢您改进您的答案,尽管您现在所做的只是得到
不同的结果。