Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thống kê với Tcl và Mysql

Những gì bạn cần ở đây là một truy vấn SQL hơi phức tạp. Nó sẽ được tạo thành từ các truy vấn con.

Đầu tiên là cái này ( fiddle ). Nó cung cấp cho bạn tổng số mục mở cửa cho mỗi tên.

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

Tiếp theo là cái này ( fiddle ). Nó cung cấp cho bạn số lần mở cho mỗi cánh cửa và tên.

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

Cái thứ ba ( fiddle ) kết hợp với tên thứ hai và cho bạn một dòng cho mỗi tên, hiển thị cửa mở.

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

Cuối cùng, bạn cần một JOIN để liên kết các truy vấn con đó với nhau, dạng này.

   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

Tất cả được viết ra trông như thế này ( fiddle ). Bạn đặt nó vào sql của mình biến và bạn đã sẵn sàng. Nó chỉ là một chuỗi nhiều dò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}

Vì vậy, có một truy vấn được tạo từ một loạt các truy vấn lồng vào nhau.

Có một số thủ thuật ở đây để bạn học khi bạn trở nên giỏi hơn trong phân tích dữ liệu SQL.

  1. sử dụng GROUP BY
  2. lồng truy vấn, còn được gọi là truy vấn con. Bạn có thể coi các truy vấn con là bảng ảo.
  3. (nâng cao) 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. Không thể khởi động máy chủ MySQL - Quá trình điều khiển đã thoát với mã lỗi

  2. MySQL:SELECT sẽ kiểm tra nhiều hơn MAX_JOIN_SIZE hàng

  3. SELECT COUNT (*) chậm, ngay cả với mệnh đề where

  4. Làm thế nào để thay đổi giá trị cột trong MySQL?

  5. Làm thế nào để sử dụng MySQLdb với Python và Django trong OSX 10.6?