【问题标题】:SQL Reduce table by merging rows based on identical "key" columns, merging non-identical "non-key" columnsSQL 通过合并基于相同“键”列的行来减少表,合并不同的“非键”列
【发布时间】:2023-03-07 01:26:02
【问题描述】:

我有一个包含大量冗余信息的表,我想减少这些信息。从示例开始,我想从这个表中移出:

+-------------+--------+----------+----------+------------------+-----------+------+
|  facility   | device | location | property |       name       | data_type | rate |
+-------------+--------+----------+----------+------------------+-----------+------+
| Chicago     | SVR2   |    501.1 | MAX_POW  | Maximum Power    | float     |   10 |
| Chicago     | SVR3   |    501.1 | MAX_POW  | Maximum Power    | float     |   10 |
| ...         |        |          |          |                  |           |      |
| Chicago     | SVR64  |    501.1 | MAX_POW  | Maximum Power    | float     |   10 |
| Chicago     | SVR1   |    501.1 | OS       | Operating System | int       |    0 |
| Minneapolis | SVR1   |       65 | MAX_POW  | Maximum Power    | float     |   10 |
+-------------+--------+----------+----------+------------------+-----------+------+

到这张桌子

+----------+--------+----------+----------+------------------+-----------+------+
| facility | device | location | property |       name       | data_type | rate |
+----------+--------+----------+----------+------------------+-----------+------+
| .*       | SVR\d+ | .*       | MAX_POW  | Maximum Power    | float     |   10 |
| Chicago  | SVR\d+ | .*       | OS       | Operating System | int       |    0 |
+----------+--------+----------+----------+------------------+-----------+------+

很可能通过这个中间表:


+---------------------+---------------------+----------+----------+---------------+-----------+------+
|      facility       |       device        | location | property |     name      | data_type | rate |
+---------------------+---------------------+----------+----------+---------------+-----------+------+
| Chicago,Minneapolis | SVR2,SVR3,...,SVR64 | 501.1,65 | MAX_POW  | Maximum Power | float     |   10 |
| Minneapolis         | SVR1                |       65 | MAX_POW  | Maximum Power | float     |   10 |
+---------------------+---------------------+----------+----------+---------------+-----------+------+

所以,我在这里考虑前 3 列 facilitydevicelocation“非关键”列和所有其他“关键”列,ms。我想合并具有相同键列值的行并生成一个正则表达式,该表达式与合并的行的所有现有非键列匹配。我知道最后一点并不容易,所以我想为相同键列的非键列获取所有值的联合集合。

我想在 SQLite 中执行此操作。我对如何获取具有相同键列的列有一个基本的想法,但我不知道如何获取非键列的联合值。如果做不到,我会写一个python脚本来做。

【问题讨论】:

  • 请注意,表格有,而不是字段。

标签: sql sqlite join


【解决方案1】:

你很可能想要GROUP_CONCAT():

SELECT GROUP_CONCAT(DISTINCT facility) facility, 
       GROUP_CONCAT(DISTINCT device) device, 
       GROUP_CONCAT(DISTINCT location) location, 
       property, name, data_type, rate
FROM tablename
GROUP BY property, name, data_type, rate

请参阅demo

> facility            | device               | location   | property | name             | data_type | rate
> :------------------ | :------------------- | :--------- | :------- | :--------------- | :-------- | ---:
> Chicago,Minneapolis | SVR2,SVR3,SVR64,SVR1 | 501.1,65.0 | MAX_POW  | Maximum Power    | float     |   10
> Chicago             | SVR1                 | 501.1      | OS       | Operating System | int       |    0

【讨论】:

    猜你喜欢
    • 2019-09-21
    • 2022-08-18
    • 1970-01-01
    • 2016-12-09
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多