簡體   English   中英

從同一表聯接多個Sql語句

[英]Join Multiple Sql statements from the same table

我已經閱讀了很多有關該主題的文章,但還不滿意。

我有一個名為ticket的表,其中包含以下各列

TicketID | AirlineID | PassengerID | TicketPrice | TicketVolume | DestinationCountry | ExitCountry | TicketDate`

我有多個查詢,例如

SELECT AVG(TicketPrice) 
FROM ticket 
WHERE TicketPrice between 552 and 1302
AND AirlineID=1 
AND TicketDate between '2016-01-01' and '2016-12-31' 
GROUP BY TicketDate

SELECT AVG(TicketPrice) 
FROM ticket 
WHERE TicketPrice between 552 and 1302 
AND AirlineID=1 
AND TicketDate between '2017-01-01' and '2017-12-31' 
GROUP BY TicketDate

請問如何將兩個查詢並排組成另一個表

+--------------------------------++-----------
| AirlineID || Average Ticket Price 2016/2017|
+--------------------------------++-----------

他們實際上是更多的查詢。

只需使用CASE即可實現:

嘗試這個:

SELECT
    AirlineID,
    AVG(CASE WHEN TicketDate BETWEEN '2016-01-01' AND '2016-12-31' THEN TicketPrice END),
    AVG(CASE WHEN TicketDate BETWEEN '2017-01-01' AND '2017-12-31' THEN TicketPrice END) 
FROM ticket 
WHERE
    TicketPrice BETWEEN 552 AND 1302 AND
    AirlineID = 1 
GROUP BY
    AirlineID, TicketDate;

這是我的解決方案,也許不是OP的期望輸出,但我認為這是更好的輸出,也不需要硬編碼的日期

SELECT AirlineID, extract(YEAR from TicketDate) as year, AVG(TicketPrice)
FROM ticket
WHERE TicketPrice between 552 and 1302
GROUP BY AirLineID, year

如果要將結果合並到一個表中,請使用UNION。

SELECT {...}
UNION
SELECT {...}

SELECT語句必須返回相同的列

的SQL

 SELECT 
 (SELECT AVG(TicketPrice) FROM ticket 
    WHERE TicketPrice between 552 and 1302
    AND AirlineID=1 
    AND TicketDate between '2016-01-01' and '2016-12-31' 
    GROUP BY TicketDate) as Col1,
(SELECT AVG(TicketPrice) FROM ticket 
    WHERE TicketPrice between 552 and 1302 
    AND AirlineID=1 
    AND TicketDate between '2017-01-01' and '2017-12-31' 
    GROUP BY TicketDate) as Col2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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