Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Penggaruk Kepala Tabel Pivot MySQL

Seperti yang telah disebutkan, MySQL tidak dibangun untuk berporos sendiri dan Anda mungkin harus berporos dalam kode jika memungkinkan, tetapi kecuali itu, di bawah ini adalah beberapa contoh SQL yang harus melakukan apa yang Anda inginkan. Dengan asumsi tabel Anda yang sebenarnya adalah variabel dalam beberapa hal (seperti berapa banyak q[x] kolom yang Anda miliki, atau berapa banyak super_id yang Anda miliki), Anda dapat membungkusnya dalam prosedur tersimpan untuk secara dinamis menghasilkan dan menjalankan SQL yang diperlukan.

Dengan asumsi tabel awal bernama testTable:

mysql> select * from testTable;
+----------+--------+------+------+
| super_id | cat_id | qa   | qb   |
+----------+--------+------+------+
|        1 |      1 |    5 |    5 | 
|        1 |      2 |    2 |    5 | 
|        1 |      3 |    3 |    4 | 
|        2 |      4 |    5 |    3 | 
|        2 |      5 |    3 |    4 | 
|        2 |      6 |    4 |    2 | 
+----------+--------+------+------+
6 rows in set (0.00 sec)

Gunakan SQL berikut:

SELECT
    'qa' q,
    SUM( CASE WHEN super_id = 1 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
    SUM( CASE WHEN super_id = 2 THEN qa ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
FROM
    testTable
UNION ALL
SELECT
    'qb' q,
    SUM( CASE WHEN super_id = 1 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 1 THEN 1 ELSE 0 END ) super_id_1,
    SUM( CASE WHEN super_id = 2 THEN qb ELSE 0 END )/SUM( CASE WHEN super_id = 2 THEN 1 ELSE 0 END ) super_id_2
FROM
    testTable
;

Untuk mencapai hasil ini:

+----+------------+------------+
| q  | super_id_1 | super_id_2 |
+----+------------+------------+
| qa |     3.3333 |     4.0000 | 
| qb |     4.6667 |     3.0000 | 
+----+------------+------------+
2 rows in set (0.00 sec)

(edit:pemformatan)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praktik Terbaik mysqldump:Bagian 2 – Panduan Migrasi

  2. Apa sintaks yang benar dari pernyataan IF di MySQL?

  3. Batasi ukuran koleksi di JPA

  4. Pemicu MySQL dengan pernyataan SELECT

  5. Urutan Panduan yang salah