2012-03-25 4 views
0

Meine Frage ist, ein Geschäft, die jedes Element zu mehr als den durchschnittlichen Marktpreis zu verkaufen abrufen;SQL-Unterabfragen Issues

SELECT SHOP_NAME, Trade_Name 
FROM SELL_ITEM f 
WHERE PRICE > 
    (SELECT 
    AVG(PRICE) 
    FROM SELL_ITEM s 
    WHERE f.Trade_Name = s.Trade_Name 
    GROUP BY TRADE_NAME); 

Diese Abfrage zurückgeben mir alle Shop Artikel Verkauf> als durchschnittliche Marktpreis, aber wie kann ich die nicht für jedes Element herausfiltern?

+0

Ist das Mysql, MSSQL, Oracle ...? – McGarnagle

+0

Ich benutze MySQL – user236501

+0

Sie sollten Testdaten und erwartetes Ergebnis enthalten –

Antwort

1

Edited ... (eine Nuance verpasst das erste Mal)

SELECT shop_name FROM 
(
    SELECT shop_name, MIN(case when f.price > a.avg_price then 1 else 0 end) AS is_always_higher_than_avg 
    FROM SELL_ITEM f 
    INNER JOIN 
    (
     SELECT avg(price) AS avg_price, trade_name 
     FROM sell_item 
     GROUP BY trade_name 
    ) a 
    ON f.trade_name = a.trade_name 
    WHERE f.price > a.avg_price 
    GROUP BY shop_name 
) b 
WHERE is_always_higher_than_avg = 1 
+0

Kann ein Beispiel für MSSQL geben? – user236501

+0

Bitte Entscheide dich - du hast gesagt, das ist MySql! –

+0

Ihre Abfrage gibt mir tatsächlich den shop_name, der nur mehrere Artikel Preis höher als der Durchschnitt hat, aber nicht jedes Element – user236501