簡體   English   中英

PostgreSQL CROSS JOIN 查詢問題

[英]PostgreSQL CROSS JOIN query issue

我想改進以下查詢:

WITH calendar as (
      SELECT d
      FROM generate_series(
'2015-01-01'::timestamp, '2020-12-01'::timestamp, interval '1 month'
) d
     )
     
SELECT c.d::date AS ord_date,
       n.id,
       coalesce(nb_cit,0) as nb_cit
FROM (SELECT distinct t.id from "data".taxonomie t where id = '30092') n CROSS JOIN
     calendar c
left join 
(select date_trunc('month', i2.date_d) as mon, count(c2.id) as nb_cit
from "data".inventaire i2, "data".citation c2 where i2.id = c2.id_inv and c2.id_taxo = '30092'
group by mon) s
on c.d = s.mon

它在我設置一個 id 時起作用(在 from 和 left 連接中)。 但我們的想法是為所有 id 生成結果。

如果我不設置此標識符,無論標識符是什么,我都會得到相同的結果。 我想我必須從左連接中取出“count(c2.id)”,但我不知道該怎么做。

歡迎幫助!

最好的問候, 馬蒂亞斯

我認為您只想在子查詢中按 id 進行聚合:

SELECT c.d::date AS ord_date,
       n.id,
       coalesce(s.nb_cit, 0) as nb_cit
FROM (SELECT DISTINCT t.id FROM "data".taxonomie t) n CROSS JOIN
     calendar c LEFT JOIN
     (SELECT c2.id_taxo, date_trunc('month', i2.date_d) as mon, count(c2.id) as nb_cit
      FROM "data".inventaire i2 JOIN
           "data".citation c2 
           ON i2.id = c2.id_inv 
      GROUP BY c2.id_taxo, mon
     ) s
     ON c.d = s.mon AND n.id = s.id_taxo;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM