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;
可能的
结果
列值列表(以及输出的结构)是否固定?可能的结果
列值列表(以及输出的结构)是否固定?