问题:为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。
答案 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?。