mysql - 2个单独表格的总和

标签 mysql sql oracle phpmyadmin

我下面有 2 个表

表一

ID  TYPE MONTH QTY
1   I6    1     5
2   I5    2     5
3   I4    1     5
4   I6    2     5

表2

ID  TYPE MONTH QTY
1   I6    1     5
2   I5    1     5
3   I5    2     5

期望的输出(两个表的总和)

TYPE MONTH1QTY MONTH2QTY
IP4    5          0
IP6    10         5
IP5    5          10

我怎样才能做到这一点?

提前致谢。

最佳答案

因为这两个表的格式相同,所以使用 UNION ALL (NOT 只是 UNION 将两个表放在一起很简单,因为这会删除重复的数据集)

然后您可以使用 SUM(CASE WHEN) 来转换数据。

SELECT
  type,
  SUM(CASE WHEN month = 1 THEN qty END)   AS month_1_qty,
  SUM(CASE WHEN month = 2 THEN qty END)   AS month_2_qty
FROM
(
    SELECT * FROM table1
    UNION ALL
    SELECT * FROM table2
)
   unified_table
GROUP BY
    type

请注意,如果没有动态 SQL,您必须对要查询的月份进行硬编码。 (您不能仅仅因为数据中出现新的月份就“神奇地”出现额外的列。)

在这种情况下,您不知道要查询哪个月份,请以规范化形式保存数据,然后在您的应用程序/表示层中进行数据透视。

SELECT
  type,
  month,
  SUM(qty)   AS qty
FROM
(
    SELECT * FROM table1
    UNION ALL
    SELECT * FROM table2
)
   unified_table
GROUP BY
    type,
    month

如果您在每个表中有不同的字段,只需在 UNION ALL 中更具体一些。

(
    SELECT type, month, qty FROM table1
    UNION ALL
    SELECT type, month, qty FROM table2
)

关于mysql - 2个单独表格的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32463097/

相关文章:

mysql - 在mysql存储过程的表中插入数据

Java登录MySQL数据库

java - 如何使用 native SQL 作为在 Hibernate 中使用 Criteria API 进行的更大查询的片段(where 子句)?

sql - HANA While 循环

css - 如何使用 CSS 格式化 Oracle APEX 区域项?

oracle - 我可以实现 Openjdk 并创建一个可再分发的新 JDK 吗?,而不通过 tck 或任何特殊许可的测试?

php - While 循环可以用来捕捉错误吗?

mysql - 统计MySQL中的空数据

php - 使用 PHP 在一条 SQL 语句中进行多个查询

java - weblogic.wsee.jaxws.spi.ClientInstanceInitationHandler NullPointerException