输入表如下:

Year Region ID Value
2021 Asia 01 15
2021 Europe 02 35
2021 Asia 03 45
2022 Europe 04 49

我正在按年份、地区和ID Select 条目:

SELECT year,
       region,
       id,
       value
FROM my_table
WHERE region = 'Asia'
  AND year = 2021
  AND (id = 01 OR id = 03)

结果是:

Year Region ID Value
2021 Asia 01 15
2021 Asia 03 45

然后,我需要将ID为03(45)的字符串中的值除以ID为01(15)的字符串中的值,得到所选字符串下的结果(3),如下所示:

Year Region ID Value
2021 Asia 01 15
2021 Asia 03 45
2021 Result 3

以下是我try 过的:

SELECT year,
    region,
    (id = 03 / id = 01),
    value
FROM my_table
WHERE region = 'Asia'
    AND year = 2021
    AND (id = 01 OR id = 03)

但这并不管用.

在SQLite中这是可能的吗?请求应该是什么?

推荐答案

可以在子查询中使用子查询中的窗口函数,以 Select 子查询中筛选的第一个和最后一个值.一旦 Select 了您的值,您就可以将一个值除以另一个值.然后使用UNION ALL来收集子查询的结果和摘要记录.

WITH cte AS (
    SELECT Year_,
           Region,
           ID,
           Value
    FROM my_table
    WHERE Region = 'Asia'
      AND Year_ = 2021
      AND ID IN (01, 03)
)
SELECT * FROM cte
UNION ALL
SELECT DISTINCT 2021, 'Result', NULL, 
                1.0* FIRST_VALUE(Value) OVER(ORDER BY ID DESC) /
                  FIRST_VALUE(Value) OVER(ORDER BY ID)
FROM cte

Output:

Year_ Region ID Value
2021 Asia 1 15
2021 Asia 3 45
2021 Result null 3

查看演示here.

Sql相关问答推荐

SQL查询以条件空值跟踪生产操作结果进展

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

Postgres,使用iLike运算符从json数组中搜索的工作方式与从常规表中搜索不同

基于多个字段删除Access中的重复记录,同时保留最低优先级

替换条件中的单元格值

当一个视图在Postgres中失效时?

如何计算一个用户S的日常连胜?

将一个数组反嵌套到另外两个数组SQL中(Athena/presto)

将两列相加为同一表中的行的查询

按属性值 Select 数组元素Postgres Jsonb

group-by-clause具有特定列,而不是oracle的toad中的all

在where语句中使用CTE非常缓慢

SQL:无重复项的两个聚合函数

如何将输出转换为二维格式?

多行状态下的分组查询判断状态

PostgreSQL - 从同一张表中获取值

计算 PostgreSQL 中的平均会话长度

创建一个将层次 struct 级别放入列中的查询

当计数为 0 时显示行

postgreSQL 中的循环表