首頁 > 資料庫 > mysql教程 > 如何準確地透視具有不同記錄的資料以避免遺失資訊?

如何準確地透視具有不同記錄的資料以避免遺失資訊?

Barbara Streisand
發布: 2024-12-30 13:01:12
原創
459 人瀏覽過

How Can I Accurately Pivot Data with Distinct Records to Avoid Losing Information?

有效地透視不同記錄

透視查詢在將資料轉換為表格格式、實現輕鬆資料分析方面發揮著至關重要的作用。但是,在處理不同記錄時,資料透視查詢的預設行為可能會出現問題。

問題:忽略不同值

考慮下表:

------------------------------------------------------
| 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    |
------------------------------------------------------
登入後複製

傳統的資料透視查詢,例如as:

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
登入後複製

將產生下表:

-------------------------------------------------------------------
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
-------------------------------------------------------------------
登入後複製

此處的問題是,當name 重複且百分比為0時,資料透視查詢會忽略name1 的不同值。在這種情況下,James 的「Lacking」活動就會遺失。

解決方案:使用ROW_NUMBER() 進行準確度

為了解決這個問題,我們可以引入ROW_NUMBER():

;with cte as 
(
    select *, ROW_NUMBER() over (partition by name order by percentage desc) ROWNUM
    from A
)
...
登入後複製

透過🎜>透過🎜>透過🎜>透過🎜>透過🎜>透過🎜>透過🎜>透過🎜>透過🎜>透過🎜>通過使用ROW_NUMBER(),我們根據名稱對資料進行分區,並為每一行分配一個唯一的編號在該分區內。這使我們能夠保留活動和百分比之間的關聯,即使名稱重複也是如此。

結果表將是:

----------------------------------------------------------
| 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
----------------------------------------------------------
登入後複製

所有活動,包括 James 的「Lacking」 ,現在表示在資料透視表中。此技術可確保保留不同的值,為分析提供準確的數據。

以上是如何準確地透視具有不同記錄的資料以避免遺失資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板