【问题标题】:How to group different rows in one column? [closed]如何在一列中对不同的行进行分组? [关闭]
【发布时间】:2021-08-15 08:24:40
【问题描述】:

我有一个项目网站,需要在一个列中汇总所有预算类别。

例如,我有一列包含:

分类:

水、电、煤气、租金、住院费、医药、个人护理、健身,

我要选择总和

水、电、气、租金

并将其命名为水电费。

与总和相同

住院费、医药费、个人护理、健身

作为医疗保健。

我应该使用什么sql语句?

任何帮助将不胜感激

【问题讨论】:

    标签: mysql sql database group-by


    【解决方案1】:

    您可能会有其他表格,或此表格上的另一列,将特定账单映射到一般组或类别

    然后您将运行一个查询,例如(如果您将类别组放在主表中)

    SELECT categorygroup, sum(amount)
    FROM bills
    GROUP BY categorygroup
    

    或者(如果你有单独的表加入)

    SELECT bcg.categorygroup, sum(amount)
    FROM bills b INNER JOIN billcategorygroups bcg ON b.category=bcg.category
    GROUP BY bcg.categorygroup
    

    然后您将维护表格,例如(主表格样式中的类别):

    Bills
    Category, CategoryGroup, Amount
    ---
    Electricity, Utility, 123
    Water, Utility, 456
    

    或者(单独的表格以组样式映射类别)

    BillCategoryGroups
    Category, CategoryGroup
    ---
    Water, Utility
    Electricity, Utility
    

    等等

    必须映射电力 -> 公用事业、水 -> 公用事业等。我可能会有一个单独的表,因为它很容易重组。如果您决定 Cellular 不再是 Utility 而是 Personal,那么只需在映射表中更改它就会更改所有报告。它还有助于防止拼写错误和影响报告的数据输入错误 - 如果您使用单表路由,甚至将一张电费账单记为 Utitily,它就会在报告中获得自己的行。使用单独的表格也可以轻松添加新类别。所有这些事情都可以通过单表和大更新语句等来完成,但我们有充分的理由对数据进行“规范化”

    【讨论】:

    • 我使用 php 将数据插入我的数据库顺便说一句,如果我执行第一个选项,我需要从原始表中删除该列吗?
    • 这些都不提倡删除列。第一个主张在现有表中添加一列,这很简单但不是最优的。第二个主张创建一个包含两列的 mew 表,一列用于账单类别,一列用于我称之为“组”的“组”(公用事业、医疗保健)。您需要对数据进行多级分类,相同的数据具有不同的类别,具有不同的粒度
    【解决方案2】:

    您可以使用条件聚合。喜欢

    SELECT project,
           SUM(CASE WHEN category IN ('water','electricity','gas','rentals')
                    THEN spent
                    ELSE 0
                    END) AS bills,
           SUM(CASE WHEN category IN ('hospital fees','medicine','personal care','fitness')
                    THEN spent
                    ELSE 0
                    END) AS healthcare
    FROM datatable
    GROUP BY project;
    

    但是数据规范化是最好的选择。所有类别都必须移动到单独的表格中。请参阅Caius Jard 的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      相关资源
      最近更新 更多