簡體   English   中英

如何避免SQL中的子查詢重復?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM