Mysql 查询动态列表时,组中的计数不起作用
我有一个名为table1的表,如下所示:Mysql 查询动态列表时,组中的计数不起作用,mysql,sql,pivot,group-concat,dynamic-pivot,Mysql,Sql,Pivot,Group Concat,Dynamic Pivot,我有一个名为table1的表,如下所示: id period value name 1 2020-06-01 3 anna 2 2020-06-01 2 anna 3 2020-06-01 3 anna 4 2020-06-01 1 juned 5 2020-06-01
id period value name
1 2020-06-01 3 anna
2 2020-06-01 2 anna
3 2020-06-01 3 anna
4 2020-06-01 1 juned
5 2020-06-01 3 juned
6 2020-06-01 2 juned
7 2020-07-01 3 anna
8 2020-07-01 2 anna
9 2020-07-01 2 anna
10 2020-07-01 3 juned
11 2020-07-01 3 juned
12 2020-07-01 3 juned
我希望查询结果显示值3的计数
我试过这是代码,但结果是错误1111-组函数的使用无效
我将动态SQL编写为:
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT 'SUM(value = 3 AND period = ''', period, ''') AS `', period, '`')
INTO @sql
FROM table1;
SET @sql = CONCAT('SELECT name, ', @sql, ' FROM table1 GROUP BY name');
-- debug
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
代码的主要问题是聚合函数中条件表达式的措辞方式。此外:
在GROUP_CONCAT中不需要CONCAT:可以在GROUP_CONCAT中放置多个值,用字符串分隔
对文字字符串使用单引号而不是双引号
执行查询后,取消分配语句处理程序
-获得学分,以满足索尼首先创作小提琴的要求
生成的sql:
| @sql |
| :------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SELECT name, SUM(value = 3 AND period = '2020-06-01') AS `2020-06-01`,SUM(value = 3 AND period = '2020-07-01') AS `2020-07-01` FROM table1 GROUP BY name |
查询结果:
name | 2020-06-01 | 2020-07-01
:---- | ---------: | ---------:
anna | 2 | 1
juned | 1 | 3
| @sql |
| :------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SELECT name, SUM(value = 3 AND period = '2020-06-01') AS `2020-06-01`,SUM(value = 3 AND period = '2020-07-01') AS `2020-07-01` FROM table1 GROUP BY name |
name | 2020-06-01 | 2020-07-01
:---- | ---------: | ---------:
anna | 2 | 1
juned | 1 | 3