Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 SQL查询:遍历具有相同值和计数出现次数的行_Mysql_Sql - Fatal编程技术网

Mysql SQL查询:遍历具有相同值和计数出现次数的行

Mysql SQL查询:遍历具有相同值和计数出现次数的行,mysql,sql,Mysql,Sql,我有以下表格结构: Name Fruit -------------------- Bob Apple Bob Pear Alice Apple Alice Orange Alice Orange Bob Orange Bob Apple Alice Pear Bob Orange Bob Apple 我想遍历Name列,并计算不同果实的数量。 首选输出为: Name Apple Pear

我有以下表格结构:

Name     Fruit
--------------------
Bob      Apple
Bob      Pear
Alice    Apple
Alice    Orange
Alice    Orange
Bob      Orange
Bob      Apple
Alice    Pear
Bob      Orange
Bob      Apple
我想遍历Name列,并计算不同果实的数量。 首选输出为:

Name    Apple     Pear      Orange
----------------------------------
Bob     3         1         2
Alice   1         1         2

有人知道我如何在MySQL workbench中将其作为SQL查询编写吗?

使用条件聚合:

select name,
       sum(fruit = 'Apple') as num_apples,
       sum(fruit = 'Pear') as num_pears,
       sum(fruit = 'Orange') as num_oranges
from t
group by name;

使用条件聚合:

select name,
       sum(fruit = 'Apple') as num_apples,
       sum(fruit = 'Pear') as num_pears,
       sum(fruit = 'Orange') as num_oranges
from t
group by name;

您还可以使用CASE表达式

SELECT Name,
       SUM(CASE WHEN fruit = 'Apple' THEN 1 ELSE 0 END) Apples,
       SUM(CASE WHEN fruit = 'Pear' THEN 1 ELSE 0 END) Pear,
       SUM(CASE WHEN fruit = 'Orange' THEN 1 ELSE 0 END) Orange
FROM Table1
GROUP BY Name;

您还可以使用CASE表达式

SELECT Name,
       SUM(CASE WHEN fruit = 'Apple' THEN 1 ELSE 0 END) Apples,
       SUM(CASE WHEN fruit = 'Pear' THEN 1 ELSE 0 END) Pear,
       SUM(CASE WHEN fruit = 'Orange' THEN 1 ELSE 0 END) Orange
FROM Table1
GROUP BY Name;

请尝试使用下面的SQL。“水果”是表的名称:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(tf.Fruit = ''',
      Fruit,
      ''', 1, 0)) AS ',
      Fruit
    )
  ) INTO @sql
FROM fruits;

SET @sql = CONCAT('SELECT tf.name, ', 
                   @sql, 
                  ' FROM fruits tf                                     
                    GROUP BY tf.name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

请尝试使用下面的SQL。“水果”是表的名称:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(tf.Fruit = ''',
      Fruit,
      ''', 1, 0)) AS ',
      Fruit
    )
  ) INTO @sql
FROM fruits;

SET @sql = CONCAT('SELECT tf.name, ', 
                   @sql, 
                  ' FROM fruits tf                                     
                    GROUP BY tf.name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

可能的
结果
列值列表(以及输出的结构)是否固定?可能的
结果
列值列表(以及输出的结构)是否固定?