sql - 在视图 sql 中过滤嵌套表
问题描述
我正在尝试基于此查询创建视图
with fields as (
select id, data_id, value
from test
where data_id in (123, 345)
),
counted as (
SELECT id, data_id, sum(meta.count) as count
FROM fields
LEFT JOIN meta ON meta.field_id = fields.id
group by data_id, meta.field_id, value
)
SELECT id, data_id, count
FROM (
SELECT id, data_id, count,
RANK() OVER (PARTITION BY data_id ORDER BY count DESC) dest_rank
FROM counted
) t
WHERE dest_rank = 1
但是where data_id in (123, 345)
需要自定义,以便我可以编写SELECT * from my_view where data_id in (123, 345)
或使用 JOIN,例如
SELECT * FROM another_table LEFT JOIN my_view ON my_view.data_id = another_table.data_id
实现这一目标的最佳方法是什么?
解决方案
您可以使用自定义值作为参数创建一个函数:
CREATE OR REPLACE FUNCTION my_function (a int, b int)
RETURNS TABLE(id int, data_id int, count int) AS $$
with fields as (
select id, data_id, value
from test
where data_id in ($1, $2)
),
...
$$ LANGUAGE SQL;
然后你可以做这个查询:
SELECT my_function(123, 456);
推荐阅读
- python - pandas.date_range 和 dataframe.index 之间的区别
- javascript - 为什么 event.stopPropagation() 不能阻止 a
- angular - 在 Observable 完成之前调用的 RxJS 管道 Finalize 运算符
- java - 最小交替二进制系列计数(硬币翻转问题)
- c# - C# MongoDB.Driver .NET 5 慢查询时间
- postgresql - 如何使用 Npgsql 查询某些 jsonb 字段
- java - 在带有 Maven 和 Java 14 的 NetBeans 12 中使用“清理和构建项目”时出现类路径错误
- r - 在 highcharter 中是否有来自 ggplot 的“geom_density_2d”的替代方案?
- d3.js - D3 Plus 环网截断
- python - 在功能性 Keras 模型中使用 lambda 重塑输入