0
時間単位で集計された総売上金額を集計する集計を行いたいとします。売り上げの有無にかかわらず、過去24時間以内にすべての時間を返す必要があり、その時間内に発生した売り上げを含める必要があります。私はそうのようなGENERATE_SERIES
をやってこれを行うにはPSQL - 左結合後にNULL列を返さない
...
SELECT * FROM GENERATE_SERIES(
date_trunc('hour', current_timestamp - interval '23 hour'),
date_trunc('hour', current_timestamp),
'1 hour'
)
これは、次の行
generate_series
------------------------
2017-09-17 16:00:00-07
2017-09-17 17:00:00-07
2017-09-17 18:00:00-07
2017-09-17 19:00:00-07
2017-09-17 20:00:00-07
2017-09-17 21:00:00-07
2017-09-17 22:00:00-07
2017-09-17 23:00:00-07
2017-09-18 00:00:00-07
2017-09-18 01:00:00-07
2017-09-18 02:00:00-07
2017-09-18 03:00:00-07
2017-09-18 04:00:00-07
2017-09-18 05:00:00-07
2017-09-18 06:00:00-07
2017-09-18 07:00:00-07
2017-09-18 08:00:00-07
2017-09-18 09:00:00-07
2017-09-18 10:00:00-07
2017-09-18 11:00:00-07
2017-09-18 12:00:00-07
2017-09-18 13:00:00-07
2017-09-18 14:00:00-07
2017-09-18 15:00:00-07
(24 rows)
これは、これまでのところ良いですが返されます。今私は番号を得るために私の注文表に加わりたいと思う。私はこれを取得、これを実行すると、私は
hour | price | merchant_id
---------------------+---------+-------------
| 0 | 1
2017-09-18 09:00:00 | 2934.00 | 1
(2 rows)
2質問...
1 ...
SELECT
date_trunc('hour', orders.ordered_at) as hour,
COALESCE(SUM(orders.total), 0) AS price,
#{merchant.id} AS merchant_id
FROM GENERATE_SERIES(
date_trunc('hour', current_timestamp - interval '23 hour'),
date_trunc('hour', current_timestamp),
'1 hour'
) AS h
LEFT JOIN orders
ON date_trunc('hour', orders.ordered_at) = h
AND orders.merchant_id = merchant_id
GROUP BY hour
ORDER BY hour DESC;
...これをやっている - なぜ私はNULLの時間を持っています
2 - 他のすべての時間はどこに行きましたか? 1行に価格があり、他の行に価格が0の24行があります。
aha!ありがとうございました!参考までに、あなたの答えは1つのタイプミスです。 'COALESCE(SUM(o.total)'でなければなりません。 – cheeseandpepper