mysql同一行中满足条件的两列之和

12 浏览
0 Comments

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专家。请问有人可以帮助我找到查询的解决方案吗?

0
0 Comments

问题的原因是,用户想要在每一行中计算"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提供的帮助,让我获得了更多的知识。

0