1
votes

Requête SQL: parcourir les lignes avec les mêmes valeurs et compter les occurrences

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?


1 commentaires

La liste des valeurs possibles de la colonne Fruit (et donc la structure de la sortie) est-elle fixe?


3 Réponses :


0
votes

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;


0 commentaires

0
votes

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;


0 commentaires

0
votes

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;


0 commentaires