sql >> Databasteknik >  >> RDS >> Mysql

Statistik med Tcl och Mysql

Vad du behöver här är en lite utarbetad SQL-fråga. Den kommer att bestå av underfrågor.

Den första är denna (fiol ). Det ger dig det totala antalet dörröppna föremål för varje namn.

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

Nästa är den här (fiol ). Det ger dig antalet öppningar per dörr och namn.

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

Den tredje (fiol ) innehåller den andra och ger dig en rad för varje namn, vilket visar att dörren öppnas.

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

Slutligen behöver du en JOIN för att knyta samman dessa underfrågor, i det här formuläret.

   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

Allt preciserat ser det ut så här (fiol ). Du lägger in den i din sql variabel och du är klar. Det är bara en flerradssträng.

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å det finns en fråga som består av ett gäng kapslade frågor.

Det finns några knep här för dig att lära dig när du blir bättre på SQL-dataanalys.

  1. användning av GROUP BY
  2. frågekapsling, även känd som underfrågor. Du kan tänka på delfrågor som virtuella tabeller.
  3. (avancerat) GROUP_CONCAT .



  1. Blir index snabbare än> jämförelse i MySQL?

  2. Hur konverterar man en sträng till en decimal?

  3. 2 sätt att sammanfoga strängar och siffror i MariaDB

  4. MYSQL + PHP för att visa data från två rader som en enda kolumn