我有一个查询:查找2010-2014年间产品'beta600'的平均数量最大的分支和分支城市。
我执行此代码,但没有结果。执行大约需要10分钟,并且给出null。你能帮忙吗?

SELECT DISTINCT branch_code,branch_city, AVG(trn_amount)) AS max_avg
FROM branches,transactions,products,accounts
WHERE branches.branch_code = accounts.branch_code AND
products.product_code = accounts.product_code AND
accounts.account_id = transactions.account_id AND
product_name = 'Beta600' AND
trn_date > '31/12/2009' AND trn_date < '1/1/2015'
GROUP BY branch_code,branch_city
ORDER BY max_avg
LIMIT 1;

最佳答案

您的方法似乎很合理,但是查询可能需要做一些工作。以下是建议:


使用显式JOIN语法。简单规则:切勿在FROM子句中使用逗号。 *总是use explicit JOIN`语法。
使用表别名。它们使查询更易于编写和阅读。
使用标准日期格式-YYYY-MM-DD。


结果查询:

SELECT b.branch_code, b.branch_city, AVG(t.trn_amount)) AS max_avg
FROM branches b JOIN
     accounts a
     ON b.branch_code = a.branch_code JOIN
     transactions t
     ON a.account_id = t.account_id JOIN
     products p
     ON p.product_code = a.product_code
WHERE p.product_name = 'beta600' AND
      t.trn_date > '2009-12-31' AND t.trn_date < '2015-01-01'
GROUP BY branch_code, branch_city
ORDER BY max_avg
LIMIT 1;


如果查询未返回任何结果,则WHERE子句将所有内容过滤掉。可能是日期格式或产品名称的大小写引起了问题。

10-04 14:35
查看更多