我没有搜索/解释此查询的话,所以我在这里问。所以我有表A,它使用user_id
为用户存储了几条记录。我想返回定义用户是否存在其中一个颜色值的行。
Table A
id | user_id | color
1 | 34 | red
2 | 34 | blue
3 | 50 | red
4 | 34 | green
5 | 77 | red
6 | 8 | red
7 | 77 | green
我希望根据上表返回。 1是记录存在而0表示不存在。
user_id | red | blue | green
34 |1 | 1 | 1
50 |1 | 0 | 0
77 |1 | 0 | 1
8 |1 | 0 | 0
基本上我想要完成的是找出表{A} color
列中的所有不同值,然后选择每个user_id具有哪些值,并在每个用户的一行中显示它。我遇到的问题是一次性完成此操作而事先不知道color
列中的值是什么。
答案 0 :(得分:0)
这称为枢轴
SET SESSION group_concat_max_len = 1000000;
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN color= ''',
color,
''' THEN 1 ELSE 0 END) AS ',
color
)
)INTO @sql
FROM
tableA;
SET @sql=CONCAT('SELECT user_id,',@sql,' FROM
tableA GROUP BY user_Id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;