这就是我想要做的事情
select something1,something2,account_id,
(select u.organization_id
from public.sfdc_contact sfdcc
join public.users u on u.email=sfdcc.email
where sfdcc.account_id=account_id
group by u.organization_id
order by count(*)
limit 1
)
from something
Redshift提示我错误,因为我试图按顺序计数。但我不能在子查询中有2列,任何提示?
答案 0 :(得分:0)
不完全确定此结构是否完全符合您的需求,但使用" window functions"例如ROW_NUMBER()OVER()可用于从连接的派生表(子查询)提供单行。例如:
SELECT
s.something1
, s.something2
, s.account_id
, d2.organization_id
, d2.cn
FROM something s
LEFT JOIN (
SELECT
organization_id
, account_id
, cn
, ROW_NUMBER() OVER (PARTITION BY organization_id ORDER BY cn) rn
FROM (
SELECT
u.organization_id
, sfdcc.account_id
, COUNT(*) OVER (PARTITION BY u.organization_id, sfdcc.account_id) cn
FROM public.sfdc_contact sfdcc
JOIN public.users u ON u.email = sfdcc.email
) d1
) d2 ON s.account_id = d2.account_id and d2.rn = 1
使用COUNT()OVER()可能是不必要的,这可能更实用:
SELECT
s.something1
, s.something2
, s.account_id
, d2.organization_id
, d2.cn
FROM something s
LEFT JOIN (
SELECT
organization_id
, account_id
, cn
, ROW_NUMBER() OVER (PARTITION BY organization_id ORDER BY cn) rn
FROM (
SELECT
u.organization_id
, sfdcc.account_id
, COUNT(*) cn
FROM public.sfdc_contact sfdcc
JOIN public.users u ON u.email = sfdcc.email
GROUP BY
u.organization_id
, sfdcc.account_id
) d1
) d2 ON s.account_id = d2.account_id and d2.rn = 1
另请注意,如果您想要最高计数,请将row_number中使用的顺序更改为DESCending:
, ROW_NUMBER() OVER (PARTITION BY organization_id ORDER BY cn DESC) rn