首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板