Php 如何对mySQL表中的数据进行分组/汇总?
我在数据库中有一个表,我想对它执行mySQL查询。下面是该表的外观: 给定此表,我想显示每次旅程的用户总数/计数和目标名称 我尝试使用GROUP BY和COUNT,但我只得到以下结果: 如您所见,数据仅按goalname分组。有没有一种方法可以通过mySQL查询实现这种结果:?见下图 像这样的。我希望你能帮我做这件事。提前谢谢 您需要的是将列旋转成行。不幸的是,MySQL没有透视表操作符。但是您可以使用CASE表达式来执行此操作,如-Php 如何对mySQL表中的数据进行分组/汇总?,php,mysql,sql,Php,Mysql,Sql,我在数据库中有一个表,我想对它执行mySQL查询。下面是该表的外观: 给定此表,我想显示每次旅程的用户总数/计数和目标名称 我尝试使用GROUP BY和COUNT,但我只得到以下结果: 如您所见,数据仅按goalname分组。有没有一种方法可以通过mySQL查询实现这种结果:?见下图 像这样的。我希望你能帮我做这件事。提前谢谢 您需要的是将列旋转成行。不幸的是,MySQL没有透视表操作符。但是您可以使用CASE表达式来执行此操作,如- SELECT journey, SUM(CASE W
SELECT
journey,
SUM(CASE WHEN goalname = 'Frank.net Hospital Cash Back' THEN count END) AS `Frank.net Hospital Cash Back`,
SUM(CASE WHEN goalname = 'Frank.net Life Cover' THEN count END) AS `Frank.net Life Cover`,
SUM(CASE WHEN goalname = 'Frank.net Salary Protection' THEN count END) AS `Frank.net Salary Protection`,
SUM(CASE WHEN goalname = 'King Price Car Insurance' THEN count END) AS `King Price Car Insurance`
FROM test
GROUP BY journey;
SQLFIDLE示例-下面的查询可能适用于您的情况
SELECT
a.journey,
a.goalname,
FIND_IN_SET(a.goalname, (SELECT GROUP_CONCAT(goalname) FROM <table_name> b.journey = a.journey)) AS no_of_goalname
FROM <table_name> a
您已经接受了答案,但只是为了好玩,如果您想动态生成列名,以便在输入新的goalName条目时,您不必更改代码,您可以使用下面的
+我想得很好。非常感谢你。我只是根据自己的需要修改了查询。我用计数代替了总数
DROP PROCEDURE IF EXISTS getCount//
CREATE PROCEDURE getCount ()
BEGIN
-- First we declare all the variables we will need
DECLARE loopGoalName VARCHAR(100);
DECLARE dynamicSql VARCHAR(5000);
DECLARE finalSql VARCHAR(5000);
-- flag which will be set to true, when cursor reaches end of table
DECLARE exit_loop BOOLEAN;
-- Declare the sql for the cursor
DECLARE example_cursor CURSOR FOR
SELECT DISTINCT goalName
FROM YourTableName;
-- Let mysql set exit_loop to true, if there are no more rows to iterate
DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_loop = TRUE;
SET dynamicSql = '';
SET finalSql = '';
-- open the cursor
OPEN example_cursor;
-- marks the beginning of the loop
example_loop: LOOP
-- read the name from next row into the variable l_name
FETCH example_cursor INTO loopGoalName;
-- check if the exit_loop flag has been set by mysql,
-- if it has been set we close the cursor and exit
-- the loop
IF exit_loop THEN
CLOSE example_cursor;
LEAVE example_loop;
END IF;
SET DynamicSql = CONCAT(DynamicSql,",SUM(IF(goalName='",loopGoalName,"',1,0)) as `",loopGoalName,"`");
END LOOP example_loop;
SET finalSql = CONCAT('SELECT journey',DynamicSql,
' FROM yourTableName
GROUP BY journey');
-- now we run set some variables and run the dynamically built query
SET @finalSql = finalSql;
PREPARE stmt1 FROM @finalSql;
EXECUTE stmt1;
END//