我有一个包含这样的值的表
+-------+-----------+------------+------------+-----------+
| 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/