Mysql
 sql >> Base de données >  >> RDS >> Mysql

Statistiques avec Tcl et Mysql

Ce dont vous avez besoin ici est une requête SQL légèrement élaborée. Elle sera composée de sous-requêtes.

Le premier est celui-ci (violon ). Il vous donne le nombre total d'éléments à porte ouverte pour chaque nom.

 SELECT COUNT(*) total, name FROM stats GROUP BY name

Le suivant est celui-ci (violon ). Il vous donne le nombre d'ouvertures par porte et par nom.

SELECT COUNT(*) bydoor, name, door FROM stats GROUP BY name, door

Le troisième (violon ) incorpore le second, et vous donne une ligne pour chaque nom, montrant la porte qui s'ouvre.

SELECT name, 
       GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
  FROM (   SELECT COUNT(*) bydoor,
                  name,
                  door
             FROM stats
            GROUP BY name, door
        ) s
  GROUP BY name

Enfin, vous avez besoin d'un JOIN pour lier ces sous-requêtes ensemble, de cette forme.

   SELECT t.name, t.total, d.details
     FROM ( .... the first subquery ....) t
     JOIN ( .... the second subquery .... ) d ON t.name = d.name
    ORDER BY t.total DESC, t.name

Tout cela ressemble à ceci (violon ). Vous le mettez dans votre sql variable et vous êtes prêt à partir. C'est juste une chaîne multiligne.

set sql {SELECT t.name, t.total, d.details
  FROM (SELECT COUNT(*) total, name FROM stats GROUP BY name) t
  JOIN (  SELECT name, 
                 GROUP_CONCAT(CONCAT(bydoor,'X',' door ', door) ORDER BY bydoor DESC) details
            FROM (   SELECT COUNT(*) bydoor,
                            name,
                            door
                       FROM stats
                      GROUP BY name, door
                 ) s
           GROUP BY name
        ) d ON t.name = d.name
  ORDER BY t.total DESC, t.name}

Il y a donc une requête composée d'un tas de requêtes imbriquées.

Il y a quelques astuces ici que vous apprendrez à mesure que vous vous améliorerez dans l'analyse de données SQL.

  1. utilisation de GROUP BY
  2. imbrication de requêtes, également appelées sous-requêtes. Vous pouvez considérer les sous-requêtes comme des tables virtuelles.
  3. (avancé) GROUP_CONCAT .