如何在没有子查询的情况下重写此查询?
所以我想要做什么:如何在没有子查询的情况下重写此查询?
我有一个表有一些商店的一些商品的价格,我想要做的是找到从该商店出售的所有商品的平均价格,并且在店内销售的所有类似物品的总和。
我的栏目有:
- ITEM_NO
- 分支
- 总金额
什么是真正重要的是,我必须避免子查询,所以我不能做这样的事情:
SELECT DISTINCT branch AS postcode, item_no, avg_price
FROM Prices
NATURAL JOIN (SELECT branch, AVG(totalamount) avg_price FROM Prices GROUP BY branch) av
WHERE sum > avg_price ORDER BY turnover DESC , branch;
这正是我想要做的事情,但我必须做到没有子查询。
编辑1个问题:
在那里派生和临时表之间的差异?所以对于赋值,我不允许使用子查询或临时表,所以我的答案是否有这两个?
您可以在同一个SELECT语句内的相同或不同列上指定多个聚合语句。要确切地看到我的意思是在网上看书。
这有“家庭作业”写在它上面。您可以使用临时表(或SQL Server中的临时变量)来完成,但使用一个使用子查询的sql语句会更有效。 – SteveCav 2010-11-12 02:58:47
在这里你可以怎么做,
SELECT branch AS postcode,
item_no,
AVG(totalamount) avg_price ,
SUM(totalamount) sum
FROM prices
WHERE SUM(totalamount) > avg_turnover
ORDER BY avg_turnover DESC ,
eatit_Order.branch
GROUP BY branch,
item_no;
然后用样本数据告诉我们结果应该如何。 – 2010-11-12 03:05:53
对于每个分支的平均价格,您可以使用自联接和GROUP BY,而不是一个子查询。但是我不清楚剩下的事情...... item_no和avg_turnover必须分支到什么关系?主要关键是什么?我们可以看到架构吗? – bobince 2010-11-12 01:35:16
@Sam ...只是注意:你使用的是所谓的派生表。子查询是Select语句作为where或Column的一部分。将派生表视为从非索引视图中进行选择。 – 2010-11-12 01:41:27
对于什么数据库?虽然它可能是MySQL ... – 2010-11-12 02:08:56