【问题标题】:SQL pass the row or add subsequent row based on column valuesSQL 根据列值传递行或添加后续行
【发布时间】:2018-03-06 02:30:38
【问题描述】:

我有一个 select 语句,它返回如下的一些行:

a| b| c| d|
1, 2, 5, 1
1, 5, 7, 1
2, 5, 4, 1
2, 5, 2, 2
3, 5, 9, 1

我需要做的是,如果后续行中的 col a 和 col b 匹配,它们代表相同的对象,并且需要为行添加 c 并作为单行返回。如果下一行不匹配,则需要返回。我不确定我是否需要 d 列,它只是从不同的选择中生成的。

查询结果如下所示

a| b| c| d
1, 2, 5, 1
1, 5, 7, 1
2, 5, 6, 1  // the combination of rows 3 & 4
3, 5, 9, 1

对不起,我想得太像程序员了。如果有人能给我一个开始的地方,我将非常感激。

【问题讨论】:

  • 编辑您的问题并显示结果集。你的解释很难理解。同时标记您正在使用的数据库。
  • 后续行 是模糊的。您需要指定哪一列指定行顺序。
  • 顺序真的重要吗?例如,如果 a=2, b=5 出现在结果集中的任何其他位置,您是否也希望添加它的 'c' 值?如果是这样,只需select a, b, sum(c) from XXX group by a, b ?
  • @JeffBreadner 听起来像是对我的回答
  • @all 我需要重新考虑这个问题。我有一个生成列 d = 1 的行的选择和另一个生成 d = 2 行的选择。我使用联合将它们放在一起,我认为必须有更好的方法。很抱歉浪费您的时间。

标签: sql postgresql select join


【解决方案1】:

select a, b, sum(c) as c from XXX group by a, b

程序员在开始学习 SQL 时必须做出的转变是不要在程序上考虑数据集,而不是逐行迭代数据。你作为一个集合对其进行操作。这可能是一个艰难的过渡。

聚合信息:

这是非常基本的 SQL,我建议通过一些教程或 HackerRank 之类的东西来熟悉该语言。

【讨论】:

    【解决方案2】:

    Group BySUMMIN 函数一起使用。

    SQL Fiddle

    PostgreSQL 9.6 架构设置

    CREATE TABLE t
        (a int, b int, c int, d int)
    ;
    
    INSERT INTO t
        (a, b, c, d)
    VALUES
        (1, 2, 5, 1),
        (1, 5, 7, 1),
        (2, 5, 4, 1),
        (2, 5, 2, 2),
        (3, 5, 9, 1)
    ;
    

    查询 1

    SELECT a
        ,b
        ,SUM(c) AS c
        ,MIN(d) AS d
    FROM t
    GROUP BY a
        ,b
    ORDER BY a
    

    Results

    | a | b | c | d |
    |---|---|---|---|
    | 1 | 2 | 5 | 1 |
    | 1 | 5 | 7 | 1 |
    | 2 | 5 | 6 | 1 |
    | 3 | 5 | 9 | 1 |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      相关资源
      最近更新 更多