在Java中尝试解密时出现 "算法错误 "的错误[英] Sustract two queries from same table

本文是小编为大家收集整理的关于在Java中尝试解密时出现 "算法错误 "的错误的处理方法,想解了在Java中尝试解密时出现 "算法错误 "的错误的问题怎么解决?在Java中尝试解密时出现 "算法错误 "的错误问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

假设我有 2 张桌子:table device是一组测量设备,table data是一组设备测量的不同类型的值.

Table data = (no, id,value_type,value, dayhour) no is PK, id refer to table device
Table device = (id, name) id is PK

我目前有一个查询,它将获取在特定日期由 id 生成的特定 value_type 的所有值的总和,例如:

SELECT SUM(cast(a.value as int)),b.name FROM data a INNER JOIN device b
ON a.id=b.id 
AND a.id=1
AND a.value_type=2
AND date(a.dayhour)='2015-12-12'
GROUP BY b.name

查询没有问题.现在我希望能够减去不同值类型的总和.我目前正在做的是两个查询,一个用于获取 value_type 2 的总和,另一个用于获取 value_type 3 的总和,然后在上层进程中进行减法.

但是,我想从单个查询中执行此操作,类似于这样的查询,该查询将检索具有 value_type 2 总和的列,另一列具有 value_type 3 的总和,第三列具有减法这两列.

推荐答案

SELECT b.name, a.*, a.sum2 - a.sum3 AS diff
FROM  (
    SELECT id
         , sum(CASE WHEN value_type = 2 THEN value::int END) AS sum2
         , sum(CASE WHEN value_type = 3 THEN value::int END) AS sum3
    FROM   data
    WHERE  id = 1
    AND    value_type IN (2, 3)
    AND    dayhour >= '2015-12-12 0:0'::timestamp
    AND    dayhour <  '2015-12-13 0:0'::timestamp
    GROUP  BY 1
    ) a
JOIN   device b USING (id);
  • 假设 dayhour 是时间戳数据类型(信息丢失).迄今为止的演员表将禁用基本索引.这就是为什么我将其转换为 sargable 谓词的原因.更多细节:
  • 为什么选择value::int?
  • 先聚合,然后加入设备.更便宜.

本文地址:https://www.itbaoku.cn/post/1764168.html