[英]Combine 2 sql queries into 1 query
我現在有 2 個查詢,如果可能,我希望將其合並為 1 個。
我在 Tickets_Open 表中存儲了未結票,在 Tickets_Closed 中已關閉票。 兩個表都有“Date_Requested”和“Date_Completed”列。 我需要計算每天請求和完成的門票數量。
我的票請求計數查詢如下:
SELECT SUM(Count) AS TotalOpen, Date FROM(
SELECT COUNT(Ticket_Request_Code) AS Count, Date_Requested AS Date
FROM Tickets_Closed
WHERE Date_Requested >='2018-01-01 00:00:00'
GROUP BY(Date_Requested)
UNION
SELECT COUNT(Work_Request_Code) AS Count, Date_Requested AS Date
FROM Tickets_Open
WHERE Date_Requested >='2018-01-01 00:00:00'
GROUP BY(Date_Requested)
) AS t1 GROUP BY Date ORDER BY `t1`.`Date` DESC
我的票完成計數查詢如下:
SELECT COUNT(Ticket_Request_Code) AS CountClosed, Date_Completed AS Date
FROM Tickets_Closed
Where Date_Completed >='2018-01-01 00:00:00'
GROUP BY(Date_Completed)
兩個查詢都返回正確的結果。 對於打開,它返回列標題 Date 和 TotalOpen。 對於關閉,它返回列標題 Date 和 CountClosed。
是否可以使用以下列標題日期、TotalOpen、CountClosed 返回它。
您可以將這些組合為:
SELECT Date, SUM(isopen) as isopen, SUM(isclose) as isclose
FROM ((SELECT date_requested as date, 1 as isopen, 0 as isclose
FROM Tickets_Closed
WHERE Date_Requested >= '2018-01-01'
) UNION ALL
(SELECT date_requested, 1 as isopen, 0 as isclose
FROM Tickets_Open
WHERE Date_Requested >= '2018-01-01'
) UNION ALL
(SELECT date_closed as date, 0 as isopen, 1 as isclose
FROM Tickets_Closed
WHERE date_closed >= '2018-01-01'
)
) t
GROUP BY Date
ORDER BY Date DESC;
這假設Ticket_Request_Code
和Work_Request_Code
不是NULL
。 如果COUNT()
確實用於檢查NULL
值,則將條件添加到每個子查詢中的WHERE
子句。
此查詢也在日期上使用 FULL OUTER JOIN,但它正確地將打開/關閉計數加在一起為您提供 TotalOpen 計數。 如果您有一天沒有關閉任何票證,這也將處理可能的 NULL 值。
WITH open AS
(
SELECT COUNT(Work_Request_Code) AS OpenCount, Date_Requested AS Date
FROM Tickets_Open
WHERE Date_Requested >='2018-01-01 00:00:00'
GROUP BY(Date_Requested)
)
, close AS
(
SELECT COUNT(Ticket_Request_Code) AS ClosedCount, Date_Requested AS Date
FROM Tickets_Closed
WHERE Date_Requested >='2018-01-01 00:00:00'
GROUP BY(Date_Requested)
)
SELECT
COALESCE(c.Date, o.Date) AS Date
, IFNULL(o.OpenCount, 0) + IFNULL(c.ClosedCount, 0) AS TotalOpen
, IFNULL(c.CountClosed, 0) AS CountClosed
FROM open o
FULL OUTER JOIN closed c ON o.Date = c.Date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.