2012-03-25 48 views
0

我的问题是检索出售每个商品的商店数量超过平均市场价格;SQL子查询问题

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); 

该查询返回我所有的商店,出售项目>高于市场平均价格,但我怎么能过滤掉那些不是为每个项目?

+0

是这个MySQL,MSSQL,甲骨文...? – McGarnagle 2012-03-25 03:23:14

+0

我正在使用MySQL – user236501 2012-03-25 03:27:44

+0

您应该包含测试数据和预期结果 – 2012-03-25 08:35:08

回答

1

编辑...(错过了一个细微的第一次)

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

能够举一个MSSQL的例子吗? – user236501 2012-03-25 03:30:51

+0

请打定主意 - 您确实说过这是MySql! – 2012-03-25 03:34:18

+0

您的查询实际上给我返回了shop_name只有几个项目价格高于平均水平,但不是每个项目 – user236501 2012-03-25 03:34:53