MySQL SUM、join 和 union 4 个表

标签 mysql join sum union

我有 4 个列名相似的表:

Table 1 : simp_wajib
id    anggota    nilai
1     nama1      100
2     nama2      100
3     nama1      100

Table 2 : simp_pokok
id    anggota    nilai
1     nama2      100
2     nama3      100
3     nama1      100

Table 3 : simp_sukarela
id    anggota    nilai
1     nama2      100
2     nama2      100
3     nama1      100

Table 4 : simp_berjangka
id    anggota    nilai
1     nama3      100
2     nama2      100
3     nama3      100

我尝试用以下查询连接四个表,但它给了我不正确的总和值

SELECT nama.anggota, sum(simp_wajib.nilai) as wajib, sum(simp_pokok.nilai) as pokok,sum(simp_sukarela.nilai) as sukarela,sum(simp_berjangka.nilai) as berjangka
FROM
(SELECT anggota from simp_pokok
 UNION
 SELECT anggota FROM simp_wajib) nama
 LEFT JOIN simp_pokok ON simp_pokok.anggota=nama.anggota
 LEFT JOIN simp_wajib ON simp_wajib.anggota=nama.anggota
 LEFT JOIN simp_sukarela ON simp_sukarela.anggota=nama.anggota
 LEFT JOIN simp_berjangka ON simp_berjangka.anggota=nama.anggota
 group by nama.anggota

任何帮助将不胜感激

最佳答案

如果您连接表,您最终会得到比预期更多的行,因为连接会跨越表之间的值。 您可能需要的是所有表之间的联合,以汇总公共(public)值,首先按公共(public)列分组,然后从您将添加的自定义字段中添加以跟踪原始表。

最后,您将使用 CASE 语句转置结果。

select anggota, 
sum(CASE WHEN origin = 'simp_pokok' THEN nilai END) `simp_pokok`,
sum(CASE WHEN origin = 'simp_wajib' THEN nilai END) `simp_wajib`,
sum(CASE WHEN origin = 'simp_sukarela' THEN nilai END) `simp_sukarela`,
sum(CASE WHEN origin = 'simp_berjangka' THEN nilai END) `simp_berjangka`
from (
    SELECT nama.anggota, sum(nilai) as nilai, origin
    FROM
    (SELECT anggota, nilai, 'simp_pokok' as origin from simp_pokok
     UNION ALL
     SELECT anggota, nilai, 'simp_wajib' as origin FROM simp_wajib
     UNION ALL
     SELECT anggota, nilai, 'simp_sukarela' as origin FROM simp_sukarela
     UNION ALL
     SELECT anggota, nilai, 'simp_berjangka' as origin FROM simp_berjangka
    ) nama
    group by nama.anggota, nama.origin) united
group by anggota

如果你不喜欢“空”值,你可以用合并函数包装 sum(),比如

coalesce(sum(CASE ...), 0) as `simp_pokok`

关于MySQL SUM、join 和 union 4 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48924362/

相关文章:

php - Laravel 仅从数据库中抛出一组数据

python - 使用 python 和 MySQLdb 将多个字典对象插入到 MySQL 数据库中

MySQL 连接 - 数据不在第二个表中

python - Pandas : How to sum column values over a date range

matlab - 对于向量中的每个元素,将前 n 个元素相加

php - 在 php MySql 中显示网格中的所有列

mysql - 如何将 3 种不同类型的 SQL 查询合并为 1 种

sql - 带连接的 TSQL 更新语句

php - 一个表列中的 MySQL join/sum 值与另一个表中的计数值

php - 无法在 PHPmyadmin 中创建外键