簡體   English   中英

如何mysql連接來自同一表的兩個選擇查詢結果

[英]how to mysql join two select query results from same table

我有一個名為'records'的mysql表,其結構如下:docdate,db,cr,total

和兩個查詢,例如:

1. SELECT docdate, SUM(total) as ins FROM records where db='somefilter' AND 'someotherfilters' GROUP BY docdate
2. SELECT docdate, SUM(total) as outs FROM records where cr='somefilter' GROUP BY docdate

我想在一個sql語句中達到的結果是:

docdate         ins      outs
2015-12-15     NULL   1200.00
2015-12-16  1000.00      NULL
2015-12-17  2500.00   2000.00

任何想法將不勝感激。 特納克斯

如果您不介意使用0而不是NULL,則可以在SUM內放置一個IF ,如下所示:

SELECT
    docdate, 
    SUM(IF(db='somefilter' AND 'someotherfilters', total, 0)) as ins,
    SUM(IF(cr='somefilter', total, 0)) as outs
FROM records
GROUP BY docdate

編輯:

如果您確實想擁有NULL值,則可以將SUM包裝在NULLIF語句中

... NULLIF(SUM(...), 0) AS ...

我喜歡SUMIF答案-這是獲得相同結果的另一種方式(但按要求返回null)

請記住,如果記錄表很大,則這兩種方法都會出現可怕的性能問題(因為這兩種方法都需要順序掃描。這是SQL提琴http://sqlfiddle.com/#!9/b066c/1

SELECT
  docdate,
  (
    SELECT SUM(total) FROM records r2 WHERE r2.docdate = records.docdate AND r2.field1 = 'Live'
  ) as ins,
  (
    SELECT SUM(total) FROM records r3 WHERE r3.docdate = records.docdate AND r3.field1 = 'Test' AND r3.field2 = 'OK'
  ) as outs
FROM
  records
GROUP BY 1

一種方法是使用UNION,請參見http://dev.mysql.com/doc/refman/5.7/en/union.html

SELECT docdate, SUM(ins) as ins , SUM(outs) as outs
FROM 
(
    (
    SELECT docdate, SUM(total) as ins , null as outs
    FROM records 
    where db='somefilter' AND 'someotherfilters' 
    GROUP BY docdate
    )
    UNION
    (
    SELECT docdate, null as ins, SUM(total) as outs 
    FROM records 
    where cr='somefilter' GROUP BY docdate
    )
) AS t
GROUP BY docdate;

暫無
暫無

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

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