sql - 是否可以将外部数据处理为某种虚拟表?
问题描述
我有以下问题,我需要制作一个漏斗,我需要在其中显示我拥有的数据与数据库中的数据之间的相关性。我有以下类型的查询:
select name, count(distinct email) from some_table
where name = 'name_1' and email in ('email 1', 'email 2', 'email 3') or
name = 'name_2' and email in ('email 2', 'email 4', 'email 5')
group by 1
是否有可能以这样的方式处理 where 语句中的数据,以便我可以将其作为一个表格来处理,我的意思是如果有可能在 where 语句中按名称计算电子邮件到类似这样的东西?
select name, count(emails in the list), count(distinct email)
得到这样的结果
name_1 3 2
name_2 3 1
...
列出的电子邮件可能不在 some_table 中,如果我要加入表,我将为每个不直接相关的数据块加入 3 个不同的表。我拥有的数据是手动处理的,不会添加到数据库中。
解决方案
您可以使用 VALUES 列表来构建您的虚拟表,并将其连接到您的真实表。
select f.name, count(distinct email) from some_table join
(VALUES ('name_1', '{email 1,email 2,email 3}'::text[]),
('name_2', '{email 2,email 4,email 5}')) f(name,emails)
on some_table.name=f.name and ARRAY[email] && emails
group by 1
我不得不从 IN 列表切换到等效的数组操作,因为表可以有数组但不能有列表。
计数(列表中的电子邮件)
我不确定这意味着什么。也许这是:?
select f.name, cardinality(emails), count(distinct email) from some_table join
(VALUES ('name_1', '{email 1,email 2,email 3}'::text[]),
('name_2', '{email 2,email 4,email 5}')) f(name,emails)
on some_table.name=f.name and ARRAY[email] && emails
group by 1,2
推荐阅读
- python - 在 Jupyter Notebook 中打开 PNG
- sql - 查询 SCCM 有时仅适用于 Powershell
- javascript - 为什么在连接到 mailchimp API 3.0 时出现 401 错误
- python - 如何将字典列表添加到另一个字典?
- shopify - 使用 Shopify Liquid 的数千个分离过滤器
- android - 如何将文本和链接从 android 应用程序共享到 Messenger?
- c# - 在 Unity3d 中无法按名称找到对象 - 导致 NRE
- datagrid - 如何从清晰数据网格中隐藏 selectAll 复选框?
- kubernetes - Pod 安全策略未按预期工作
- python - python opencv准确获取系统时间的相机帧时间戳