PostgreSQL:从多行中选择结果,汇总结果并返回单行

时间:2018-09-08 14:23:32

标签: postgresql select

PostgreSQL 10中的表是通过以下方式创建的:

CREATE TABLE public."Table"(
    "ID" serial,
    "Epoch" smallint,
    "Unit" smallint,
    "Value" double precision
);

,它存储两个测量单位的读数。

通常,两个单元都应并行测量并产生指示,因此应同时插入两行(在此称为“时代”)。

但是有时也无法为单个纪元提供所有预期的两个读数,如下面的示例所示(纪元= 30和纪元= 40):

 Epoch | Unit | Value 
-------+------+-------
    10 |    1 |   1.1
    10 |    2 |   1.2
    20 |    1 |   2.1
    20 |    2 |   2.2
    30 |    1 |   3.1
    40 |    2 |   4.2
    50 |    1 |   5.1
    50 |    2 |   5.2
(8 rows)

我在执行以下查询时遇到问题:

  1. 检查同一纪元是否存在Unit = 1和Unit = 2的行
  2. 在同一行中返回两个纪元的每个纪元的结果,如下所示:

    Epoch ; Value_Unit1 ; Value_Unit2
    

两个单元均无指示的行应从结果中排除。

我正在寻找一种解决方案(针对所提供的示例),其结果如下:

10 ; 1.1 ; 1.2

20 ; 2.1 ; 2.2

50 ; 5.1 ; 5.2

这里的许多示例都处理非常相似的问题,但是它们不允许我为我的特定问题找到正确的答案,或者...我听不懂那里的建议。

谢谢。

1 个答案:

答案 0 :(得分:0)

将表与自身结合在一起,为这两种情况提供不同的别名:

SELECT
    T1."Epoch",
    T1."Value" AS Value_Unit1,
    T2."Value" AS Value_Unit2
FROM
    public."Table" AS T1
    JOIN public."Table" AS T2
    USING("Epoch")
WHERE
    T1."Unit" = 1 AND
    T2."Unit" = 2;