如何汇总多个表的行大小

时间:2018-10-18 23:35:12

标签: mysql sql group-by sum left-join

在MySQL中,我有三个表:

A:
-----------------
|g_id  | txt    |
|------|--------|
|   1  |  cat   | 
|   3  |  dog   |

B:
--------------------------
|g_id  | txt     | txt2  |
|------|---------|--------
|   1  |  hat    |  chat  |
|   3  |  that   |  NULL |
|   3  |  that   |  NULL |

C:
------------------
|g_id  | txt     |
|------|---------|
|   1  |  hat    | 
|   1  |  mat    | 
|   3  |  that   |

我的目标是汇总按g_id分组的表A,B和C的每一行的txt列...

因此,查询之后,预期结果将是:

----------------
|g_id  | size  |
|------|-------|
|   1  |  16   | 
|   3  |  15   |

我的查询失败:

SELECT 
   g_id,
   SUM(length(txt)) + SUM(length(txt2) as size
   FROM ((SELECT a.g_id, a.txt FROM a) UNION ALL
      (SELECT b.g_id, b.txt, b.txt2 FROM b) UNION ALL
      (SELECT c.g_id, c.txt FROM c) 
   ) abc
GROUP BY g_id;

错误:使用的SELECT语句的列数不同

1 个答案:

答案 0 :(得分:2)

使用union all代替join

SELECT g_id,
       SUM(length(txt)) as size
FROM ((SELECT a.g_id, a.txt FROM a) UNION ALL
      (SELECT b.g_id, b.txt FROM b) UNION ALL
      (SELECT c.g_id, c.txt FROM c) 
     ) abc
GROUP BY g_id;