[英]MYSQL query SELECT from one table and join results with other table
[英]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.