2017-08-08 61 views
0

これは、私は、カウント、ORDER BYしようとしていたので、私は赤方偏移は私にエラーを促さ方法は「相関サブクエリパターンのこのタイプはサポートされていません」を避けるために

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 

やろうとしているものです。しかし、サブクエリには2つの列を持つことはできません。

+0

代わりに結合を使用する(別のサブクエリを作成してメインクエリに参加させる) – AlexYes

答えて

0

ROW_NUMBER()などの "window functions"を使用して構造体が正確に構成されているかどうかは完全にはわかりません。結合された派生テーブル(サブクエリ)から単一行を供給するために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 

も注意してください、あなたが最高のカウントを望んでいたならば、使用順序を変更することを行番号にDESCending:

 
, ROW_NUMBER() OVER (PARTITION BY organization_id ORDER BY cn DESC) rn 
関連する問題