合并两个结果查询到一个
问题描述:
我有这样的查询(我有两个查询与join
和union
复杂的查询)合并两个结果查询到一个
SELECT
id,
COUNT(id) ct_id,
SUM(kl) sum_kl,
SUM(CASE WHEN tgl_kondisi="2017-09-13" THEN 1 ELSE 0 END) as tot,
SUM(CASE WHEN tgl_kondisi <= "2017-09-14" THEN kl ELSE 0 end) as sum_kl2
FROM (
SELECT
id_kondisi as id,
tgl_kondisi,
nilai_potensi_kerugian AS kl
FROM laporan_kondisi
UNION
SELECT
id_sub_kondisi,
tgl_kondisi,
nilai_potensi_kerugian
FROM laporan_kondisi
) merged_table GROUP BY id ORDER BY id;
结果
+------+-------+----------+------+----------+
| id | ct_id | sum_kl | tot | sum_kl2 |
+------+-------+----------+------+----------+
| 01 | 3 | 20000000 | 3 | 20000000 |
| 0101 | 2 | 9000000 | 2 | 9000000 |
| 0102 | 2 | 11000000 | 2 | 11000000 |
| 02 | 1 | 0 | 0 | 0 |
| 0201 | 1 | 0 | 0 | 0 |
| 0202 | 1 | 0 | 0 | 0 |
| 0203 | 1 | 0 | 0 | 0 |
| 03 | 2 | 4000000 | 2 | 4000000 |
| 0301 | 1 | 0 | 1 | 0 |
| 0302 | 2 | 4000000 | 2 | 4000000 |
| 0303 | 1 | 0 | 1 | 0 |
+------+-------+----------+------+----------+
而另一个查询
SELECT
id,
SUM(CASE WHEN tgl_tindak_lanjut="2017-09-14" THEN 1 ELSE 0 end) as count_all_09,
SUM(CASE WHEN tgl_tindak_lanjut="2017-09-13" THEN 1 ELSE 0 END) as count_09_13
FROM (
SELECT
a.id_kondisi as id,
d.tgl_tindak_lanjut as tgl_tindak_lanjut
FROM
laporan_kondisi a
LEFT OUTER JOIN
laporan_sebab b
ON
a.id = b.id_laporan_kondisi
LEFT OUTER JOIN
laporan_rekomendasi c
ON
b.id = c.id_laporan_sebab
LEFT OUTER JOIN
laporan_tindak_lanjut d
ON
c.id = d.id_laporan_rekomendasi
UNION
SELECT
a2.id_sub_kondisi,
d2.tgl_tindak_lanjut as tgl_tindak_lanjut
FROM
laporan_kondisi a2
LEFT OUTER JOIN
laporan_sebab b2
ON
a2.id = b2.id_laporan_kondisi
LEFT OUTER JOIN
laporan_rekomendasi c2
ON
b2.id = c2.id_laporan_sebab
LEFT OUTER join
laporan_tindak_lanjut d2
ON
c2.id = d2.id_laporan_rekomendasi
) merged_table GROUP BY id
结果
+------+--------------+-------------+
| id | count_all_09 | count_09_13 |
+------+--------------+-------------+
| 01 | 0 | 1 |
| 0101 | 0 | 1 |
| 0102 | 0 | 0 |
| 02 | 0 | 0 |
| 0201 | 0 | 0 |
| 0202 | 0 | 0 |
| 0203 | 0 | 0 |
| 03 | 0 | 0 |
| 0301 | 0 | 0 |
| 0302 | 0 | 0 |
| 0303 | 0 | 0 |
+------+--------------+-------------+
这样可以把这个表结合起来吗?
+------+-------+----------+------+----------+--------------+-------------+
| id | ct_id | sum_kl | tot | sum_kl2 | count_all_09 | count_09_13 |
+------+-------+----------+------+----------+--------------+-------------+
| 01 | 3 | 20000000 | 3 | 20000000 | 0 | 1 |
| 0101 | 2 | 9000000 | 2 | 9000000 | 0 | 1 |
| 0102 | 2 | 11000000 | 2 | 11000000 | 0 | 0 |
| 02 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0201 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0202 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0203 | 1 | 0 | 0 | 0 | 0 | 0 |
| 03 | 2 | 4000000 | 2 | 4000000 | 0 | 0 |
| 0301 | 1 | 0 | 1 | 0 | 0 | 0 |
| 0302 | 2 | 4000000 | 2 | 4000000 | 0 | 0 |
| 0303 | 1 | 0 | 1 | 0 | 0 | 0 |
+------+-------+----------+------+----------+--------------+-------------+
我试过JOIN
和其他很多,但它只给出一个单一的结果。这可能做到这样的结果吗?或者这个查询只是给我们没有结果?
答
很难说如果通过添加所有第二个查询逻辑,结果将会受到影响,因为您没有提供关于此查询所做什么或关于实际数据的任何信息。你可以做什么,哪些应该总是起作用(如果你打算重复使用这个查询,建议不要这样做,如果性能是一个问题,那么也不建议这么做),只需加入整个查询。
它看起来是这样的:
SELECT t.*,s.count_all_09,s.count_09_13
FROM (FIRST QUERY HERE) t
JOIN (SECOND QUERY HERE) s
ON(t.id = s.id)
我不知道whty但是,它给了我一个单独的结果太 – Gagantous
你说的一个结果是什么意思? – sagi
它显示行0 - 0(总共1个,查询需要0.0280秒。) – Gagantous