“CONTAINS”是否有MySQL聚合函数?

“CONTAINS”是否有MySQL聚合函数?,sql,mysql,group-by,aggregate-functions,Sql,Mysql,Group By,Aggregate Functions,假设我有这个数据集 user | group --------+------- a@a.com | A a@a.com | B b@b.com | A c@c.com | B d@d.com | A d@d.com | B d@d.com | C 我想将其转换为如下表: user | IN_A | IN_B | IN_C --------+-------+-------+------- a@a.com | TRUE | TRUE | FALSE b@b.c

假设我有这个数据集

user | group --------+------- a@a.com | A a@a.com | B b@b.com | A c@c.com | B d@d.com | A d@d.com | B d@d.com | C 我想将其转换为如下表:

user | IN_A | IN_B | IN_C --------+-------+-------+------- a@a.com | TRUE | TRUE | FALSE b@b.com | TRUE | FALSE | FALSE c@c.com | FALSE | TRUE | FALSE d@d.com | TRUE | TRUE | TRUE 我有:

SELECT user, IF(LOCATE('A', GROUP_CONCAT(group)) > 0, TRUE, FALSE) AS IN_A, IF(LOCATE('B', GROUP_CONCAT(group)) > 0, TRUE, FALSE) AS IN_B, IF(LOCATE('C', GROUP_CONCAT(group)) > 0, TRUE, FALSE) AS IN_C FROM users GROUP BY user
我想知道的是,是否有更好的方法来知道聚合字段是否包含值,或者这是唯一的方法?

不确定您将拥有多少组,但如果这是一个最终数字,我建议您为每个组创建一列或使用位屏蔽。

我想这是唯一的方法,即。,GROUP_CONCAT

我不确定这是否是你做事情的方式,因为我在这里很新,但如果这就是你正在使用的示例,那么让用户在A、B和C中列不是更容易吗?特别是因为这样,您就不会再次重复用户数据了

您可以尝试以下内容:

SELECT distinct user,  
IF(EXISTS
    (SELECT users_a.user 
        from users as users_a 
    where users_a.group = 'A' and
        users_a.user = users.user), 
TRUE, FALSE) as IN_A,
IF(EXISTS
    (SELECT users_b.user 
        from users as users_b 
    where users_b.group = 'B' and
        users_b.user = users.user), 
TRUE, FALSE) as IN_B,
IF(EXISTS
    (SELECT users_c.user 
        from users as users_c 
    where users_c.group = 'C' and
        users_c.user = users.user), 
TRUE, FALSE) as IN_C
FROM `users` WHERE 1

Tryed很好用

正确的方法是:

SELECT
   user,
   IF(SUM(group = 'A'), TRUE, FALSE) AS IN_A,
   IF(SUM(group = 'B'), TRUE, FALSE) AS IN_B,
   IF(SUM(group = 'C'), TRUE, FALSE) AS IN_C
FROM users
GROUP BY user

这就是我想要实现的:数据集使用User和Group作为双列主键。我想使用主键并将组拆分为列。这是有限的-我正试图从双键用户/组系统移动到单键用户系统,每个组都有自己的列。我找到的唯一其他方法是选择u.User,u1.group,g2.group FROM users u LEFT JOIN users u1 ON u.user=u1.user和u1.group=A LEFT JOIN users u2 ON u.user=u2.user和u2.group=B group BY u.user;工作得很漂亮!