我有一個生成從過去的365天系列星期的SQL:SQL計數摘要多個表
SELECT
to_char(weekdate, 'YYWW') as yearWeek
FROM
GENERATE_SERIES(
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-365,
NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER,
'1 week'
) AS t(weekdate)
然後我每星期計數的摘要加入從「team_a」表使用時間戳列(「LEFT OUTER JOIN」考慮到周0計數):
SELECT
to_char(weekdate, 'YYWW') as yearWeek,
count(a.timestamp) AS team_a_total
FROM
GENERATE_SERIES(
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-365,
NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER,
'1 week'
) AS t(weekdate)
LEFT OUTER JOIN team_a a
ON to_char(weekdate, 'YYWW') = to_char(a.timestamp, 'YYWW')
GROUP BY to_char(weekdate, 'YYWW')
ORDER BY yearWeek
這如預期正常工作和結果,但我想加盟計數的另一總結從「team_b」表我認爲這是一個簡單的情況下添加另一個「左外聯接」像這樣:
SELECT
to_char(weekdate, 'YYWW') as yearWeek,
count(a.timestamp) AS team_a_total,
count(b.timestamp) AS team_b_total
FROM
GENERATE_SERIES(
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-365,
NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER,
'1 week'
) AS t(weekdate)
LEFT OUTER JOIN team_a a
ON to_char(weekdate, 'YYWW') = to_char(a.timestamp, 'YYWW')
LEFT OUTER JOIN team_b b
ON to_char(weekdate, 'YYWW') = to_char(b.timestamp, 'YYWW')
GROUP BY to_char(weekdate, 'YYWW')
ORDER BY yearWeek
但結果不正確。 'team_a_total'和'team_b_total'列似乎顯示了兩列的乘積
例如,對於'1628'周(2016年第28周),'team_a_total'應該總共爲8,'' team_b_total',但這兩列顯示的結果是288,即8x36。
我在做什麼錯?
感謝您的答案。基於Laurenz的代碼,這是我(以及Hambone的答案)什麼工作:
---------------------------
SELECT weekdate,
team_a_total,
count(b.timestamp) AS team_b_total
FROM
(
SELECT
to_char(weekdate, 'YYWW') AS weekdate,
count(a.timestamp) AS team_a_total
FROM
GENERATE_SERIES(
NOW()::DATE-EXTRACT(DOW FROM NOW())::INTEGER-365,
NOW()::DATE-EXTRACT(DOW from NOW())::INTEGER,
'1 week'
) AS t(weekdate)
LEFT OUTER JOIN team_a a ON to_char(a.timestamp, 'YYWW') = to_char(weekdate, 'YYWW')
GROUP BY to_char(weekdate, 'YYWW')
) subq
LEFT OUTER JOIN team_b b ON to_char(b.timestamp, 'YYWW') = weekdate
GROUP BY weekdate, team_a_total
ORDER BY weekdate
---------------------------
幾乎工作除了幾個錯字的的:「系列爲」 =>「 s as「和」a.cnt as team_b_total「=>」b.cnt as team_b_total「。此外,結果顯示空白/無數星期沒有計數;如何將它們改爲0? – Jason
是的 - 很好的錯別字。我認爲我解決了這個問題。此外,要獲得零而不是null,請使用'coalesce'。我編輯了所有這三個項目的答案(拼寫錯誤+合併)。 – Hambone