Php 对于MySql中的不同值,将值计数提取为不同的列

Php 对于MySql中的不同值,将值计数提取为不同的列,php,mysql,Php,Mysql,我在MySQL表中有以下格式的数据。 我想在MySql查询中将字符串值的计数提取为不同的列,这意味着如果列有3个不同的值,那么在从数据库提取数据时,将向结果中添加3列 表: 预期结果: 现在,我正在尝试以下查询,但未找到预期结果 SELECT task, (CASE WHEN priority = 'low' THEN 1 ELSe 0 END ) AS 'low_priority',(CASE WHEN priority = 'medium' THEN 1 ELSE 0 END) AS 'me

我在MySQL表中有以下格式的数据。 我想在MySql查询中将字符串值的计数提取为不同的列,这意味着如果列有3个不同的值,那么在从数据库提取数据时,将向结果中添加3列

表:

预期结果:

现在,我正在尝试以下查询,但未找到预期结果

SELECT task, (CASE WHEN priority = 'low' THEN 1 ELSe 0 END ) AS 'low_priority',(CASE WHEN priority = 'medium' THEN 1 ELSE 0 END) AS 'medium_priority',(CASE WHEN priority = 'high' THEN 1 ELSE 0 END ) AS 'high_priority' FROM task LEFT JOIN priority ON priority.task_id = task.id GROUP BY task.id
你可以这样做

SELECT task, SUM(CASE WHEN priority = 'Low' THEN 1 ELSE 0 END )   AS 'low_priority',
             SUM(CASE WHEN priority = 'Medium' THEN 1 ELSE 0 END) AS 'medium_priority',
             SUM(CASE WHEN priority = 'High' THEN 1 ELSE 0 END )  AS 'high_priority'
FROM task 
LEFT JOIN priority ON priority.task_id = task.id GROUP BY task.id
HAVING SUM(CASE WHEN priority = 'Low' THEN 1 ELSE 0 END ) > 0    OR 
       SUM(CASE WHEN priority = 'Medium' THEN 1 ELSE 0 END ) > 0 OR
       SUM(CASE WHEN priority = 'High' THEN 1 ELSE 0 END )
结果将是

+-------+--------------+-----------------+---------------+ | task | low_priority | medium_priority | high_priority | +-------+--------------+-----------------+---------------+ | TASK1 | 2 | 2 | 3 | +-------+--------------+-----------------+---------------+ 1 row in set (0.00 sec)
SELECT task, SUM(CASE WHEN priority = 'Low' THEN 1 ELSE 0 END )   AS 'low_priority',
             SUM(CASE WHEN priority = 'Medium' THEN 1 ELSE 0 END) AS 'medium_priority',
             SUM(CASE WHEN priority = 'High' THEN 1 ELSE 0 END )  AS 'high_priority'
FROM task 
LEFT JOIN priority ON priority.task_id = task.id GROUP BY task.id
HAVING SUM(CASE WHEN priority = 'Low' THEN 1 ELSE 0 END ) > 0    OR 
       SUM(CASE WHEN priority = 'Medium' THEN 1 ELSE 0 END ) > 0 OR
       SUM(CASE WHEN priority = 'High' THEN 1 ELSE 0 END )
+-------+--------------+-----------------+---------------+ | task | low_priority | medium_priority | high_priority | +-------+--------------+-----------------+---------------+ | TASK1 | 2 | 2 | 3 | +-------+--------------+-----------------+---------------+ 1 row in set (0.00 sec)