2016-05-11 15 views
0

Ich habe diese Abfrage: Finden Sie die Stadt der Branche und der Branche mit den größten durchschnittlichen Mengen für das Produkt 'beta600' zwischen 2010-2014.
Ich führe diesen Code aus, aber ich bekomme keine Ergebnisse. Es dauert ungefähr 10 Minuten, um auszuführen, und es gibt null. Kannst du helfen?Frage über avg's max

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

Syntaxfehler: extra ')' in in 'AVG()' – coatless

Antwort

0

Ihr Ansatz scheint vernünftig, aber die Abfrage könnte etwas Arbeit brauchen. Hier sind Empfehlungen:

  • Verwenden Sie explizite JOIN Syntax. Einfache Regel: Nie Kommas in der FROM Klausel verwenden. * Immer use explicit JOIN` Syntax.
  • Verwenden Sie Tabellenaliase. Sie machen die Abfrage einfacher zu schreiben und zu lesen.
  • Verwenden Sie Standard-Datumsformate - JJJJ-MM-TT.

Die resultierende Abfrage:

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; 

Wenn die Abfrage keine Ergebnisse zurückgibt, dann ist die WHERE Klausel filtert alles heraus. Vielleicht verursacht das Datumsformat oder das Gehäuse des Produktnamens das Problem.