RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 602444
Accepted
maestro
maestro
Asked:2020-12-12 12:58:40 +0000 UTC2020-12-12 12:58:40 +0000 UTC 2020-12-12 12:58:40 +0000 UTC

如何与自己加入表格?

  • 772

原始表如下所示:

CREATE TABLE public.psi_humsensor (
  id           serial NOT NULL,
  sensorblock  integer NOT NULL,
  psi_act      integer NOT NULL,
  chamber_hum  real,
  sensor_hum   real,
  /* Keys */
  CONSTRAINT psi_humsensor_pkey
    PRIMARY KEY (id),
  /* Foreign keys */
  CONSTRAINT foreign_key01
    FOREIGN KEY (psi_act)
    REFERENCES public.psi_humsensor_acts(id)
    ON DELETE RESTRICT, 
  CONSTRAINT foreign_key02
    FOREIGN KEY (sensorblock)
    REFERENCES public.sensorblock(id)
) WITH (
    OIDS = FALSE
  );

该表填充了以下数据:

表格中的数据

我正在尝试从此表生成报告。为此,您需要创建一个查询,返回室内传感器的湿度为 25%、被测传感器的湿度为 25%、室内传感器的湿度为 95%、湿度被测传感器的 95%。写了这个查询:

SELECT
      sb.serial_number
     ,t.label_number 
     ,round(CAST(psi1.chamber_hum as numeric), 2) AS ch25
     ,round(CAST(psi1.sensor_hum as numeric), 2) AS sh25
     ,abs(round(CAST((psi1.chamber_hum - psi1.sensor_hum) as numeric), 2)) as delta25
     ,round(CAST(psi2.chamber_hum as numeric), 2) AS ch95
     ,round(CAST(psi2.sensor_hum as numeric), 2) AS sh95
     ,abs(round(CAST((psi2.chamber_hum - psi2.sensor_hum) as numeric), 2)) as delta95
FROM psi_humsensor psi1
     JOIN psi_humsensor psi2 ON (psi1.psi_act = psi2.psi_act AND psi1.sensorblock = psi2.sensorblock)
     JOIN sensorblock sb ON (sb.id = psi1.sensorblock)
     JOIN termistors t ON (t.id = sb.termistor)
WHERE 
      psi1.id <> psi2.id 
  AND psi1.psi_act = 3

运行此查询会导致重复条目,例如:

1 | 1 | 25.2 | 25.3 | 0.1 | 95.3 | 95.5 | 0.2

2 | 2 | 95.3 | 95.5 | 0.2 | 25.2 | 25.3 | 0.1

如果添加到查询SELECT DISTINCT(psi1.chamber_hum + psi2.chamber_hum)中,则重复消失,但有时记录会混淆:表的左侧有 95% 的数据,右侧有 25% 的数据。如何提出这样的要求?

sql
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    pegoopik
    2020-12-12T14:31:33Z2020-12-12T14:31:33Z

    您根本不需要自我加入。所有必要的信息都已经存在,您只需要添加分组:

    SELECT
          sb.serial_number
         ,t.label_number 
         ,MAX(CASE WHEN psi.sensor_hum < 30 THEN
             round(CAST(psi.chamber_hum as numeric), 2)
          END) AS ch25
         ,MAX(CASE WHEN psi.sensor_hum < 30 THEN
             round(CAST(psi.sensor_hum as numeric), 2) 
          END) as sh25
         ,MAX(CASE WHEN psi.sensor_hum < 30 THEN
             abs(round(CAST((psi.chamber_hum - psi.sensor_hum) as numeric), 2))
          END) as delta25
         ,MAX(CASE WHEN psi.sensor_hum > 90 THEN
             round(CAST(psi.chamber_hum as numeric), 2)
          END) AS ch95
         ,MAX(CASE WHEN psi.sensor_hum > 90 THEN
             round(CAST(psi.sensor_hum as numeric), 2) 
          END) as sh95
         ,MAX(CASE WHEN psi.sensor_hum > 90 THEN
             abs(round(CAST((psi.chamber_hum - psi.sensor_hum) as numeric), 2))
          END) as delta95
    FROM psi_humsensor psi
         JOIN sensorblock sb ON (sb.id = psi.sensorblock)
         JOIN termistors t ON (t.id = sb.termistor)
    WHERE psi.psi_act = 3
    GROUP BY sb.serial_number, t.label_number 
    /*тут возможно надо добавить группировку по psi.sensorblock*/
    
    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5