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

Pivot Table Sử dụng MySQL

Để xoay vòng dữ liệu trong MySQL, bạn sẽ cần sử dụng cả hàm tổng hợp và CASE biểu thức.

Nếu bạn có một số cột đã biết, thì bạn có thể viết mã cố định cho truy vấn:

select p.postid,
  max(case when t.tagname = 'Incident' then p.value end) Incident,
  max(case when t.tagname = 'Location' then p.value end) Location,
  max(case when t.tagname = 'Weapon' then p.value end) Weapon
from triples p
left join tags t
  on p.tagid = t.id
group by p.postid;

Xem SQL Fiddle with Demo

Nhưng nếu bạn có một số lượng cột không xác định, thì bạn sẽ cần sử dụng một câu lệnh đã chuẩn bị để tạo SQL động:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(CASE WHEN TagName = ''',
      TagName,
      ''' THEN p.value END) AS `',
      TagName, '`'
    )
  ) INTO @sql
FROM tags;


SET @sql 
  = CONCAT('SELECT p.postid, ', @sql, ' 
           from triples p
           left join tags t
             on p.tagid = t.id
           group by p.postid');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Xem SQL Fiddle với Demo .

Cả hai sẽ cho kết quả:

| POSTID | INCIDENT |      LOCATION | WEAPON |
----------------------------------------------
|      1 |   Murder | New Brunswick | (null) |
|      2 |    Theft |        (null) |    Gun |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL lấy ngày n ngày trước làm dấu thời gian

  2. Tham gia vào cùng một bàn nhiều hơn một lần

  3. Lỗi khi đặt giá trị thuộc tính; ngoại lệ lồng nhau là org.springframework.beans.NotWoritesPropertyException:

  4. Tập lệnh Python 3.2 để kết nối với cơ sở dữ liệu MySQL cục bộ

  5. Cài đặt mysqlclient cho Django Python trên Mac OS X Sierra