SQL:为什么这些查询返回不同的结果?
问题描述:
为什么MAX显示不同于SUM?SQL:为什么这些查询返回不同的结果?
SELECT name, price, MAX(downloads) FROM app_list GROUP BY price;
SELECT name, price, SUM (downloads) FROM app_list GROUP BY price;
name price MAX(downloads)
ABC 0.0 30000
name price SUM(downloads)
XYZ 0.0 1000500
在第二查询中,XYZ应用程序,它是自由具有总最多下载。那么如何来应用ABC也是免费是下载量最大的应用程序?
答
你正在使用MySQL的(MIS)的功能,简单不应该允许。实际上,系统参数ONLY_FULL_GROUP_BY
是最新版本中的默认值。
问题是什么?这是第一个查询:
SELECT name, price, MAX(downloads)
FROM app_list
GROUP BY price;
无论你可能会认为或希望它是干什么的,但事实是,它返回一个不确定name
每个price
。该名称与最大值无关。
如果你想要的最大值,然后使用子查询。这里有一种方法:
SELECT a.*
FROM app_list a
WHERE a.downloads = (SELECT MAX(a2.downloads) FROM app_list a2 WHERE a2.price = a.price);
此查询还具有的优点是它可以很容易地在app_list(price, downloads, name)
需要查询的优势。
+0
哇!非常感谢你! – SMalakar
答
答
我想你想的名字
使
GROUP BY
我想'集团by'的问题是扣除了价格,并添加名字。只有Mysql允许运行此查询。如果可能的话,为所有行添加样本数据 –下注价格将为0? – SMA
我想我们应该从下面开始:你明白'MAX()'和'SUM()'各自做了什么,它们之间有什么不同? –