【问题标题】:Group and Sum values on multiple columns多列上的分组和求和值
【发布时间】:2021-11-22 02:39:47
【问题描述】:

我有一个有 8 列的表。 (可能的项目数超过 1500。为了更好地阅读本示例,我将它们命名为“项目”)。

id project_id product1 amount1 product2 amount2 product3 amount3
1 2 item5 22,5 item2 8,5 item1 4,5
2 2 item4 5,5
3 1 item1100 55,1 item1 8,5
4 3 item8 41,2
5 2 item2 22,0 item4 8,5 item2 4,5

如何对特定项目 ID 的现有产品的所有值求和?

示例:project_id 2

project_id product1 product1_sum product2 product2_sum product3 product3_sum product4 product4_sum
2 item1 4,5 item2 35 item4 14 item5 22,5

如果我只有一个产品列,这很容易,但我不知道如何检查所有 3 个。

SELECT 
  product1, SUM(amount1) AS prod_sum
FROM doe_table
WHERE project_id = 2
GROUP BY product1

【问题讨论】:

  • 您的数据模型似乎有缺陷,您的列应该是行 - 那么您的查询就是一个微不足道的总和。
  • 每行有一个产品。

标签: sql group-by sum


【解决方案1】:
  • unpivot productNamountN 列成行(取决于数据库供应商 - 请用数据库供应商标记您的问题),
  • 分组和求和
  • 然后将其转回productNproductN_sum 列。

无论如何@Stu 是对的 - 这是一个奇怪的数据模型。

另请注意,SQL 中的结果列数是预先固定的。换句话说,不可能在多个数据集上调用相同的 SQL 命令并为每个数据集获得具有不同列数的结果集。通常,列数的某个上限就足够了,但是 - 作为最坏的例子 - 如果您有任何项目包含 1500 个项目,那么您需要 3000 个列,这是不现实的。

【讨论】:

    猜你喜欢
    • 2020-10-07
    • 2019-11-13
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多