J'ai la structure de table suivante:
Name Apple Pear Orange ---------------------------------- Bob 3 1 2 Alice 1 1 2
Je veux parcourir la colonne Nom et compter le nombre de fruits distincts. La sortie préférée serait:
Name Fruit -------------------- Bob Apple Bob Pear Alice Apple Alice Orange Alice Orange Bob Orange Bob Apple Alice Pear Bob Orange Bob Apple
Est-ce que quelqu'un sait comment je peux écrire ceci sous forme de requête SQL dans MySQL Workbench?
3 Réponses :
Utiliser l'agrégation conditionnelle:
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;
Vous pouvez également utiliser l'expression 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;
Veuillez essayer avec SQL ci-dessous. "fruits" est le nom de la table:
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;
La liste des valeurs possibles de la colonne
Fruit(et donc la structure de la sortie) est-elle fixe?