Puede usar la siguiente "técnica"
Primero ejecute la consulta #1. Produce la consulta (consulta n.º 2) que debe ejecutar para obtener el resultado que necesita. Por favor, tenga en cuenta los comentarios de Mosha antes de volverse "loco" con miles de categorías :o)
Consulta #1:
SELECT 'select UserID, ' +
GROUP_CONCAT_UNQUOTED(
'sum(if(category = "' + STRING(category) + '", 1, 0)) as ' + STRING(category)
)
+ ' from YourTable group by UserID'
FROM (
SELECT category
FROM YourTable
GROUP BY category
)
El resultado será el siguiente:consulta n.º 2
SELECT
UserID,
SUM(IF(category = "A", 1, 0)) AS A,
SUM(IF(category = "B", 1, 0)) AS B,
SUM(IF(category = "C", 1, 0)) AS C
FROM
YourTable
GROUP BY
UserID
por supuesto, para tres categorías:¡podrías hacerlo manualmente, pero para miles definitivamente te alegrará el día!
El resultado de la consulta n.º 2 se verá como espera:
UserID A B C
1 1 1 0
2 0 0 1
3 1 1 1