sql >> Database teknologi >  >> RDS >> Mysql

Statistik med Tcl og Mysql

Hvad du har brug for her er en lidt udførlig SQL-forespørgsel. Det vil bestå af underforespørgsler.

Den første er denne (violin ). Det giver dig det samlede antal døråbne genstande for hvert navn.

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

Den næste er denne (violin ). Det giver dig antallet af åbninger pr. dør og navn.

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

Den tredje (violon ) inkorporerer den anden og får dig en linje for hvert navn, der viser døren-åbner.

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

Endelig har du brug for en JOIN for at binde disse underforespørgsler sammen, af denne form.

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

Alt stavet ser det sådan ud (spille ). Du lægger det ind i din sql variabel, og du er godt i gang. Det er bare en flerlinjet streng.

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}
 

Så der er en forespørgsel lavet af en masse indlejrede forespørgsler.

Der er nogle tricks her, som du kan lære, efterhånden som du bliver bedre til SQL-dataanalyse.

  1. brug af GROUP BY
  2. forespørgselsindlejring, også kendt som underforespørgsler. Du kan tænke på underforespørgsler som virtuelle tabeller.
  3. (avanceret) GROUP_CONCAT .



  1. XOR Constraint i Mysql

  2. Sådan sletter du dubletter i SQL-tabel baseret på flere felter

  3. Ignorerer året i SQL Query med datointerval

  4. Installer Innotop for at overvåge MySQL-serverydelsen