2013-03-01 115 views
0

我想为最低价格为目的-A项目和最大价格 为B目的项目,此外我按区域分组我的项目。如何避免SQL中的子查询重复?

SELECT ZONE, MIN_PRICE, MAX_PRICE --,LEFT_ZONE 
    FROM 
    (SELECT MIN(PRICE) AS MIN_PRICE , ZONE AS LEFT_ZONE 
    FROM MYTABLE 
    WHERE PURPOSE = 'A' 
     AND SOMETHING = 'SOMEVALUE' 
    GROUP BY ZONE 
    ) 
    FULL OUTER JOIN 
    (SELECT MAX(PRICE) AS MAX_PRICE, ZONE_CD 
    FROM MYTABLE 
    WHERE PURPOSE = 'B' 
     AND SOMETHING = 'SOMEVALUE' 
    GROUP BY ZONE 
    ) 
    ON LEFT_ZONE = ZONE 

该查询给我想要的输出,但我不喜欢它 有两个原因:

1)我想

FROM MYTABLE 
WHERE SOMETHING = 'SOMEVALUE' 

仅被调用一次。

2)当我的完整外连接中的行来自右表 时,我得到ZONE null。

我该如何解决这些问题。

在我的查询中是否还有一些问题?

+0

任何小的变化是什么,用来收集MIN_PRICE的原因目的'B'的max_price的目的'A'? – 2013-03-01 13:56:02

+0

在某个区域,您可以以昨天交易的最低买价以今天的价格出售,并以昨日最高买入价买入。我希望我的查询的输出包含“zone,today_sell_price,today_buy_price”。那意味着什么? – jimifiki 2013-03-01 14:08:02

回答

3

您是否尝试过使用CASE表达式得到这个:

select zone, 
    min(case when PURPOSE = 'A' then price end) min_price, 
    max(case when PURPOSE = 'B' then price end) max_price 
from MYTABLE 
where SOMETHING = 'SOMEVALUE' 
group by zone 
0

试试这个:

SELECT 
    ZONE, 
    SUM (CASE WHEN PURPOSE = 'A' THEN MIN(PRICE) ELSE 0 END) AS MIN_PRICE, 
    SUM (CASE WHEN PURPOSE = 'B' THEN MAX(PRICE) ELSE 0 END) AS MAX_PRICE 
    FROM 
    MYTABLE 
    WHERE 
    SOMETHING = 'SOMEVALUE' 
    GROUP BY 
    ZONE 

还是本