2010-11-12 61 views
0

所以我想要做什么:如何在没有子查询的情况下重写此查询?

我有一个表有一些商店的一些商品的价格,我想要做的是找到从该商店出售的所有商品的平均价格,并且在店内销售的所有类似物品的总和。

我的栏目有:

  • 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个问题:

在那里派生和临时表之间的差异?所以对于赋值,我不允许使用子查询或临时表,所以我的答案是否有这两个?

+0

对于每个分支的平均价格,您可以使用自联接和GROUP BY,而不是一个子查询。但是我不清楚剩下的事情...... item_no和avg_turnover必须分支到什么关系?主要关键是什么?我们可以看到架构吗? – bobince 2010-11-12 01:35:16

+0

@Sam ...只是注意:你使用的是所谓的派生表。子查询是Select语句作为where或Column的一部分。将派生表视为从非索引视图中进行选择。 – 2010-11-12 01:41:27

+0

对于什么数据库?虽然它可能是MySQL ... – 2010-11-12 02:08:56

回答

0

您可以在同一个SELECT语句内的相同或不同列上指定多个聚合语句。要确切地看到我的意思是在网上看书。

http://msdn.microsoft.com/en-us/library/ms177677.aspx

+0

这有“家庭作业”写在它上面。您可以使用临时表(或SQL Server中的临时变量)来完成,但使用一个使用子查询的sql语句会更有效。 – SteveCav 2010-11-12 02:58:47

0

在这里你可以怎么做,

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; 
+0

然后用样本数据告诉我们结果应该如何。 – 2010-11-12 03:05:53

相关问题