输入表是这样的:
年份 | 地区 | 身份证 | 价值 |
---|---|---|---|
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 中是否可能?请求应该是什么?
一个想法可以是在子查询中使用窗口函数,来选择使用子查询过滤的第一个和最后一个值。一旦选择了您的值,您就可以将其中一个除以另一个。然后使用
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 |
查看演示这里。