Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询动态列表时,组中的计数不起作用_Mysql_Sql_Pivot_Group Concat_Dynamic Pivot - Fatal编程技术网

Mysql 查询动态列表时,组中的计数不起作用

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

我有一个名为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     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