mysql 条件在同一行的两列的总和

标签 mysql sql

我有一个包含这样的值的表

+-------+-----------+------------+------------+-----------+
| User  | activity1 | activity2  | activity3  | activity4 |
+-------+-----------+------------+------------+-----------+
| user1 | A.C.E A1  | A....      | ABCDE ZZZ  | A.C..     |
| user2 | A.C..     | A.CD.      | ABCDE text | ABCD.     |
| user3 | ABC..     | A.C.E free | A....      | A....     |
+-------+-----------+------------+------------+-----------+

我想要类似的结果

+-------+---+---+---+---+
| User  | A | B | C | D |
+-------+---+---+---+---+
| user1 | 4 | 1 | 3 | 1 |
| user2 | 4 | 2 | 4 | 3 |
| user3 | 4 | 1 | 2 | 0 |
+-------+---+---+---+---+

A B C 和 D 的结果是每行的 Activity1..4 列中每个文本的呈现摘要。

我尝试使用 SUM(CASE WHEN ,我必须做错一些事情,它给了我错误的计数。我无法得到超过 1 的计数结果。

E 之后的文本将是任何可能的自由文本,目前不关心。

这些数据是从其他系统导出的 csv 格式的原始数据,我可以通过这种方式获取它,然后导入到 mysql 服务器。

我不是sql专家。有人可以帮助找到查询的解决方案。

最佳答案

如果我理解正确的话,你想计算每行中“A”、“B”等的数量。

基本思想是这样的:

select user,
       ((activity1 like '%A%') + (activity2 like '%A%') + (activity3 like '%A%') + (activity4 like '%A%')) as a,
       ((activity1 like '%B%') + (activity2 like '%B%') + (activity3 like '%B%') + (activity4 like '%B%')) as b,
       ((activity1 like '%C%') + (activity2 like '%C%') + (activity3 like '%C%') + (activity4 like '%C%')) as c,
       ((activity1 like '%D%') + (activity2 like '%D%') + (activity3 like '%D%') + (activity4 like '%D%')) as d
from t;

关于mysql 条件在同一行的两列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35283182/

相关文章:

mysql group by 忽略null

多列上的 SQL 左外连接

mysql - Rails 中的 SQL-IN 操作符多次出现相同的 ID

sql - 检查值是否在不同的表中

mysql - 将两个复杂的 SQL 语句合并为一个

java - 将java程序(以表单)输入的值添加到sql数据库:

mysql - 戈尔姆 : Query having subquery empty

mysql - Neo4j : Clarification needed about Data Size of Neo4j

mysql - 复制数据库后无法打开表

php - Phalcon - 原始查询插入语法错误