【问题标题】:Automatically inserting additional columns in MySQL 8.0 [duplicate]在 MySQL 8.0 中自动插入附加列 [重复]
【发布时间】:2019-07-23 17:14:40
【问题描述】:

假设我有一张这样的桌子

+----+----------+------+
| id |   name   | type |
+----+----------+------+
|  1 | apple    | F    |
|  1 | pear     | F    |
|  1 | cucumber | V    |
|  2 | orange   | F    |
|  2 | grass    | NULL |
|  2 | broccoli | V    |
|  3 | flower   | NULL |
|  3 | tomato   | NULL |
+----+----------+------+

我想最终得到一个表格,计算每种类型(包括 NULL 类型)和每个 id 的元素数量,如下所示:

+----+-----------------+--------------+--------------+
| id | type_NULL_count | type_F_count | type_V_count |
+----+-----------------+--------------+--------------+
|  1 |               0 |            2 |            1 |
|  2 |               1 |            1 |            1 |
|  3 |               2 |            0 |            0 |
+----+-----------------+--------------+--------------+

这很容易做到,但是有没有一种方法(我可以编写一个查询或其他东西)这样当我返回并编辑第一个表中的一个类型字段时,我最终会得到一个正确更新的计数表?

例如,假设我想添加一个新类型(类型X)并将flowertype 字段从NULL 更改为X。有没有办法不用重写查询或添加更多语句就可以得到下表?

+----+-----------------+--------------+--------------+--------------+
| id | type_NULL_count | type_F_count | type_V_count | type_X_count |
+----+-----------------+--------------+--------------+--------------+
|  1 |               0 |            2 |            1 |            0 |
|  2 |               1 |            1 |            1 |            0 |
|  3 |               1 |            0 |            0 |            1 |
+----+-----------------+--------------+--------------+--------------+

我不确定这是否是最好的方法,所以我愿意接受建议

【问题讨论】:

  • 您使用哪个版本的 mySQL?
  • 考虑处理应用代码中数据显示的问题。
  • 你想要的是一个“动态枢轴”。

标签: mysql sql database automation pivot-table


【解决方案1】:

拥有一个根据您的第一个表更改列数的辅助表不是一个可行的选择。 是否需要将结果保存在表格中,否则将显示为报告?

我认为更好的方法是使用下面的 SQL 按 id 和类型计算计数,并使用您的数据显示工具以您喜欢的方式显示。

select id, type, count(*) count
from d
group by 1,2
order by 1,2

输出将是

id  type    count
1   F   2
1   V   1
2   F   1
2   V   1
2       1
3   X   1
3       1

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 2022-12-07
    • 2020-12-29
    • 2019-08-01
    • 2017-09-01
    • 1970-01-01
    • 2023-03-19
    • 2023-03-26
    相关资源
    最近更新 更多