Mysql
 sql >> база данни >  >> RDS >> Mysql

Статистика с Tcl и Mysql

Това, от което се нуждаете тук, е леко сложна SQL заявка. Ще се състои от подзаявки.

Първият е този (цигулка ). Той ви дава общия брой отворени врати за всяко име.

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

Следващият е този (цигулка ). Получава ви броя отваряния на врата и име.

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

Третият (цигулка ) включва втория и ви дава един ред за всяко име, показващ отварянето на вратата.

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

И накрая, имате нужда от JOIN, за да свържете тези подзаявки заедно, от тази форма.

   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

Всичко изписано, изглежда така (цигулка ). Поставяте го във вашия sql променлива и сте готови. Това е просто многоредов низ.

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}

Така че има заявка, направена от куп вложени заявки.

Тук има някои трикове, които можете да научите, докато ставате по-добри в анализа на SQL данни.

  1. използване на GROUP BY
  2. вложение на заявки, известно също като подзаявки. Можете да мислите за подзаявките като виртуални таблици.
  3. (разширено) GROUP_CONCAT .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо този pdo::mysql код се срива на Windows?

  2. Име на динамична колона в MYSQL

  3. SQL Server срещу MySQL:СЪДЪРЖА (*,'FORMSOF(THESAURUS,word)')

  4. Съхраняване на дати в Hibernate като UTC времеви дати?

  5. Експортирайте MySQL база данни към SQLite база данни