mysql同一行中满足条件的两列之和
mysql同一行中满足条件的两列之和
我有一个包含如下值的表格:
+-------+-----------+------------+------------+-----------+ | 用户 | 活动1 | 活动2 | 活动3 | 活动4 | +-------+-----------+------------+------------+-----------+ | 用户1 | A.C.E A1 | A.... | ABCDE ZZZ | A.C.. | | 用户2 | A.C.. | A.CD. | ABCDE 文本 | ABCD. | | 用户3 | ABC.. | A.C.E 自由 | A.... | A.... | +-------+-----------+------------+------------+-----------+
我想要的结果是:
+-------+---+---+---+---+ | 用户 | A | B | C | D | +-------+---+---+---+---+ | 用户1 | 4 | 1 | 3 | 1 | | 用户2 | 4 | 2 | 4 | 3 | | 用户3 | 4 | 1 | 2 | 0 | +-------+---+---+---+---+
A、B、C和D的结果是每行在活动1..4列中每个文本的存在总结。
我尝试使用SUM(CASE WHEN,但我肯定做错了什么,得到了错误的计数。我无法获得超过1的计数结果。
E后面的文本将是自由文本,目前不重要。
这些数据最初是以csv格式从其他系统导出的,我必须以这种方式获取它,然后导入到mysql服务器。
我不是SQL专家。请问有人可以帮助我找到查询的解决方案吗?
问题的原因是,用户想要在每一行中计算"A"、"B"等活动的数量。解决方法是使用MySQL的like操作符和条件判断来统计每个活动的数量。具体的查询语句如下:
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;
这个查询语句使用了四个条件判断,每个条件判断都判断了相应的活动列是否包含指定的字符(例如"A"、"B"等)。如果包含,则返回1(true),否则返回0(false)。然后将这些返回值相加,得到每个活动的数量。
感谢Gordon Linoff提供的帮助,他的解决方法让我成功解决了我的问题。还有一个问题,当MySQL处理"activity1 like '%A%'"时,它会返回"1"还是true?
也许这个链接可以帮助你理解:[true false vs 0 1 in mysql](http://stackoverflow.com/questions/10852337)。MySQL将true/false视为1/0。
感谢Juan提供的帮助,让我获得了更多的知识。