mysql - 如何根据列中的子字符串进行聚合?

标签 mysql sql

我正在使用如下格式的表格:

  • 数字 |国家/地区
  • 5 |德国、美国、中国
  • 1 |德国、中国、日本
  • 4 |中国、印度、巴西
  • 3 |尼日利亚
  • 8 |巴西

我有另一个表,其中只有国家/地区:

  • 国家/地区 |
  • 德国 |
  • 中国 |
  • 巴西 |
  • 印度 |
  • 尼日利亚 |
  • 美国 |
  • 日本 |

现在我想根据国家/地区对 NUMBER 进行求和,因此输出将类似于:

  • 国家/地区 |总和
  • 德国 | 6 <5 + 1>
  • 中国 | 5 <1 + 4>
  • 巴西 | 12
  • 印度 | 4
  • 尼日利亚 | 3
  • 美国 | 5
  • 日本 | 1

实际的表有更多的列,每个表有 5000 多个条目。

我的逻辑是从第二个表中选择每个国家,并对第一个表的第二列进行“LIKE”操作并汇总匹配数,但我不太确定如何实现这一点。任何指导表示赞赏。

最佳答案

您可以使用 like 运算符进行连接和聚合函数 sum 来获取每个国家/地区的总计。

  SELECT C.Country, SUM(CN.Number)
  FROM Table1 CN
  INNER JOIN Table2 C ON CN.Country LIKE CONCAT('%', C.Country,'%')
  GROUP BY C.Country

关于mysql - 如何根据列中的子字符串进行聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55527954/

相关文章:

python - SQLAlchemy:修改查询对象的 from 子句

mysql - Kusto ANY/ALL 运算符(大于列)

mysql - 在 MySQL 中使用 COUNT 选择具有多个相同值的行

PHP 为日历生成和命名 html 到 mysql 数据库

php - 将 WordPress 网站从实时迁移到本地时,特色图像被破坏

sql - ISNULL 在 SQL Server 2008 中给出错误的值

sql - PostgreSQL ORDER BY 列位置(而不是列名)

sql - Oracle - 修改现有表以自动增加列

mysql - MySQL中的日期差异来计算年龄

SQL 查询中的 JavaScript 数组?