Memusing Rekod Berbeza Dengan Berkesan
Pertanyaan pangsi memainkan peranan penting dalam mengubah data menjadi format jadual, membolehkan analisis data yang mudah. Walau bagaimanapun, apabila berurusan dengan rekod yang berbeza, gelagat lalai pertanyaan pangsi mungkin menjadi masalah.
Masalah: Mengabaikan Nilai Berbeza
Pertimbangkan jadual berikut:
------------------------------------------------------ | Id Code percentage name name1 activity | ----------------------------------------------------- | 1 Prashant 43.43 James James_ Running | | 1 Prashant 70.43 Sam Sam_ Cooking | | 1 Prashant 90.34 Lisa Lisa_ Walking | | 1 Prashant 0.00 James James_ Stealing | | 1 Prashant 0.00 James James_ Lacking | | 1 Prashant 73 Sam Sam_ Cooking 1 | ------------------------------------------------------
Pertanyaan pangsi tradisional, seperti sebagai:
SELECT Id,Code, MAX(CASE WHEN name = 'James' THEN activity END) AS James, MAX(CASE WHEN name1 = 'James_' THEN percentage END) AS James_, MAX(CASE WHEN name = 'Sam' THEN activity END) AS Sam, MAX(CASE WHEN name1 = 'Sam_' THEN percentage END) AS Sam_, MAX(CASE WHEN name = 'Lisa' THEN activity END) AS Lisa, MAX(CASE WHEN name1 = 'Lisa_' THEN percentage END) AS Lisa_ FROM A GROUP BY Id, Code
akan menghasilkan jadual berikut:
------------------------------------------------------------------- Id Code James James_ Sam Sam_ Lisa Lisa_ ------------------------------------------------------------------- 1 Prashant Running 43.43 Cooking 3.43 Walking 90.34 1 Prashant Stealing 0.0 NULL NULL NULL NULL -------------------------------------------------------------------
Isu di sini ialah pertanyaan pangsi mengabaikan nilai yang berbeza untuk nama1 apabila nama diulang dan peratusannya ialah 0. Dalam kes ini, aktiviti "Kurang" untuk James hilang.
Penyelesaian: Menggunakan ROW_NUMBER() untuk Ketepatan
Untuk menangani perkara ini, kami boleh memperkenalkan ROW_NUMBER():
;with cte as ( select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM from A ) ...
Dengan menggunakan ROW_NUMBER(), kami membahagikan data berdasarkan nama dan memberikan setiap baris nombor unik dalam partition itu. Ini membolehkan kami mengekalkan perkaitan antara aktiviti dan peratusan, walaupun apabila nama diulang.
Jadual yang terhasil ialah:
---------------------------------------------------------- | Id Code James James_ Sam Sam_ Lisa Lisa_ ---------------------------------------------------------- | 1 Prashant Running 43.43 Cooking 1 73 Walking 90.34 | 1 Prashant Stealing 0.00 Cooking 3.43 NULL NULL | 1 Prashant Lacking 0.00 NULL NULL NULL NULL ----------------------------------------------------------
Semua aktiviti, termasuk "Kurang" untuk James , kini diwakili dalam jadual pangsi. Teknik ini memastikan bahawa nilai yang berbeza dipelihara, menyediakan data yang tepat untuk analisis.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Data dengan Tepat dengan Rekod Berbeza untuk Mengelakkan Kehilangan Maklumat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!