Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Memusing Jadual Tanpa Menggunakan Fungsi Agregat?

Bagaimanakah Saya Boleh Memusing Jadual Tanpa Menggunakan Fungsi Agregat?

Barbara Streisand
Lepaskan: 2025-01-20 09:47:08
asal
418 orang telah melayarinya

How Can I Pivot a Table Without Using Aggregate Functions?

Penukaran data jadual pangsi tanpa fungsi agregat

Dalam bidang pemprosesan data, kadangkala perlu untuk membentuk semula data ke dalam format yang lebih mesra pengguna atau lebih mudah untuk dianalisis. Salah satu teknik yang paling biasa untuk mencapai ini ialah berputar, di mana data diubah menjadi reka letak yang lebih luas. Walaupun berputar biasanya melibatkan nilai agregat, ia juga boleh dilakukan tanpa menggunakan sebarang fungsi agregat.

Pertimbangkan jadual berikut:

<code class="language-sql">CREATE TABLE Data (
  CustomerID int,
  DBColumnName varchar(50),
  Data varchar(50)
);

INSERT INTO Data (CustomerID, DBColumnName, Data)
VALUES
  (1, 'FirstName', 'Joe'),
  (1, 'MiddleName', 'S'),
  (1, 'LastName', 'Smith'),
  (1, 'Date', '12/12/2009'),
  (2, 'FirstName', 'Sam'),
  (2, 'MiddleName', 'S'),
  (2, 'LastName', 'Freddrick'),
  (2, 'Date', '1/12/2009'),
  (3, 'FirstName', 'Jaime'),
  (3, 'MiddleName', 'S'),
  (3, 'LastName', 'Carol'),
  (3, 'Date', '12/1/2009');</code>
Salin selepas log masuk

Jadual ini mengandungi data untuk berbilang pelanggan, di mana setiap rekod mewakili atribut tertentu (Nama Pertama, Nama Tengah, Nama Akhir, Tarikh) dan nilai yang berkaitan dengannya. Matlamatnya adalah untuk memutar data ini ke dalam format yang lebih mudah dibaca:

<code class="language-sql">CREATE TABLE PivotedData (
  CustomerID int,
  FirstName varchar(50),
  MiddleName varchar(50),
  LastName varchar(50),
  Date varchar(50)
);

INSERT INTO PivotedData (CustomerID, FirstName, MiddleName, LastName, Date)
VALUES
  (1, 'Joe', 'S', 'Smith', '12/12/2009'),
  (2, 'Sam', 'S', 'Freddrick', '1/12/2009'),
  (3, 'Jaime', 'S', 'Carol', '12/1/2009');</code>
Salin selepas log masuk

Adalah penting untuk ambil perhatian bahawa transformasi ini tidak mengagregatkan data. Sebaliknya, ia mengekalkan nilai unik untuk setiap atribut untuk setiap pelanggan.

Untuk mencapai transformasi ini tanpa menggunakan fungsi agregat, kita boleh menggunakan ungkapan CASE dalam pernyataan SELECT berkumpulan:

<code class="language-sql">SELECT
  CustomerID,
  MIN(CASE DBColumnName WHEN 'FirstName' THEN Data END) AS FirstName,
  MIN(CASE DBColumnName WHEN 'MiddleName' THEN Data END) AS MiddleName,
  MIN(CASE DBColumnName WHEN 'LastName' THEN Data END) AS LastName,
  MIN(CASE DBColumnName WHEN 'Date' THEN Data END) AS Date
FROM Data
GROUP BY CustomerID;</code>
Salin selepas log masuk

Pertanyaan ini menggunakan satu siri ungkapan CASE untuk memilih secara bersyarat nilai yang dikaitkan dengan setiap atribut untuk setiap pelanggan. Fungsi MIN() digunakan untuk mendapatkan nilai tunggal yang memenuhi syarat yang ditentukan, memastikan kami hanya mengandungi satu nilai bagi setiap atribut. Dengan mengumpulkan hasil mengikut CustomerID, kami mencipta baris untuk setiap pelanggan dengan atribut dan nilai yang sepadan.

Teknik ini membolehkan pemasingan data yang fleksibel tanpa menggunakan fungsi agregat. Ia amat berguna apabila data memerlukan transformasi minimum dan nilai asal perlu dikekalkan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memusing Jadual Tanpa Menggunakan Fungsi Agregat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan