我有这样的疑问:在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;
答案 0 :(得分:0)
您的方法似乎合理,但查询可能会使用一些工作。以下是建议:
JOIN
语法。简单规则:从不在FROM
子句中使用逗号。 *始终use explicit
JOIN`语法。结果查询:
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
子句会过滤掉所有内容。也许产品名称的日期格式或大小写导致了问题。