从所选记录中提取摘要作为值的划分

问题描述 投票:0回答:1

输入表是这样的:

年份 地区 身份证 价值
2021 亚洲 01 15
2021 欧洲 02 35
2021 亚洲 03 45
2022 欧洲 04 49

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

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

结果是:

年份 地区 身份证 价值
2021 亚洲 01 15
2021 亚洲 03 45

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

年份 地区 身份证 价值
2021 亚洲 01 15
2021 亚洲 03 45
2021 结果 3

这是我尝试过的:

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

但是不起作用。

在 SQLite 中是否可能?请求应该是什么?

sql sqlite select division
1个回答
0
投票

一个想法可以是在子查询中使用窗口函数,来选择使用子查询过滤的第一个和最后一个值。一旦选择了您的值,您就可以将其中一个除以另一个。然后使用

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, 
                FIRST_VALUE(Value) OVER(ORDER BY ID DESC) /
                  FIRST_VALUE(Value) OVER(ORDER BY ID)
FROM cte

输出

年_ 地区 身份证 价值
2021 亚洲 1 15
2021 亚洲 3 45
2021 结果 3

查看演示这里

© www.soinside.com 2019 - 2024. All rights reserved.