这两个SQL查询之间有什么区别?

时间:2015-04-16 12:36:11

标签: sql

问题:为items_ordered表中的每个项目选择项目和每单位价格。提示:将价格除以数量。

1

select item, sum(price)/sum(quantity)
from items_ordered
group by item;

2

select item, price/quantity
from items_ordered
group by item;

查看手电筒的结果。第一个显示正确的平均价格,但第二个只显示28/4并显示7,忽略4.5几行。有人请解释为什么会这样。

外部网站使用的table data

2 个答案:

答案 0 :(得分:1)

SUM()是一个群组功能 - 所以基本上是说按项目获取所有价格和数量,并将它们全部添加到一行中返回它们。

MySQL在分组时会非常宽容,并会尝试检索行集(这就是为什么你的第二个例子会返回一些东西 - 尽管是错误的)。 通常,如果您是GROUPing列(exmaple中的项目),则需要每列返回一行(item)。

尝试运行下面的SQL,看看它是什么样的。

SELECT item
     , SUM(price) AS sum_price
     , SUM(quantity) AS sum_quantity
     , COUNT(*) AS item_count
     , SUM(price) / SUM(quantity) AS avg_price_per_quant
  FROM items_ordered
 GROUP BY item
 ORDER BY item ASC

答案 1 :(得分:0)

第一个查询返回该项目的平均价格,第二个查询返回它遇到的第一个项目的价格。这只适用于MySQL,第二个查询在SQL Server中会出错,因为没有使用aggegrate函数。有关详细信息,请参阅此帖子Why does MySQL allow "group by" queries WITHOUT aggregate functions?