[英]How do I avoid sub-query repetitions in SQL?
我想要用途A的最低价格和用途B的最高价格,而且我还按区域对物品进行分组。
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。
我该如何解决这些问题。
查询中还有其他问题吗?
您是否尝试过使用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
尝试这个:
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
或任何小的变化
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.