sql >> Database >  >> RDS >> Mysql

Statistieken met Tcl en Mysql

Wat je hier nodig hebt, is een enigszins uitgebreide SQL-query. Het zal bestaan ​​uit subquery's.

De eerste is deze (fiddle ). Het geeft je het totale aantal deur-open items voor elke naam.

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

De volgende is deze (fiddle ). Het geeft je het aantal openingen per deur en naam.

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

De derde (fiddle ) bevat de tweede en geeft je één regel voor elke naam, met de deur-open.

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

Ten slotte heb je een JOIN nodig om die subquery's van deze vorm aan elkaar te koppelen.

   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

Alles gespeld ziet het er zo uit (fiddle ). Je zet het in je sql variabel en je bent klaar om te gaan. Het is gewoon een reeks met meerdere regels.

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}

Er is dus een zoekopdracht gemaakt van een aantal geneste zoekopdrachten.

Er zijn hier enkele trucs die u kunt leren naarmate u beter wordt in SQL-gegevensanalyse.

  1. gebruik van GROUP BY
  2. query nesten, ook wel subquery's genoemd. U kunt subquery's zien als virtuele tabellen.
  3. (geavanceerd) GROUP_CONCAT .



  1. Selecteer meest voorkomende waarde uit een veld in MySQL

  2. Het verschil tussen 'AND' en '&&' in SQL

  3. Logische PostgreSQL-replicatie gebruiken om een ​​altijd up-to-date lees/schrijf TEST-server te onderhouden

  4. PDO met MySQL werkt niet bij e-mailactivering