SQL根据列值传递行或添加后续行

时间:2018-03-06 02:30:38

标签: sql postgresql select join

我的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

抱歉,我认为太像程序员了。如果有人能给我一个开始的地方,我将非常感激。

2 个答案:

答案 0 :(得分:1)

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

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

有关汇总的信息:

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

答案 1 :(得分:0)

if(empty($user_logout->is_loggedin())) { $user_logout->redirect('login.html'); } 使用Group BySUM功能。

SQL Fiddle

PostgreSQL 9.6架构设置

MIN

查询1

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)
;

<强> Results

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