You want a kind of PIVOT query, which is unfortunately not supported in TD.
But it's possible, looks like a lot of source code, but it's mainly cut & paste & modify.
Assuming a table tab
with a timestamp column ts
and you want to average column col
:
SELECT
EXTRACT(HOUR FROM ts) as "hour"
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'mon' THEN col END) AS mon
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'tue' THEN col END) AS tue
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'wed' THEN col END) AS wed
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'thu' THEN col END) AS thu
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'fri' THEN col END) AS fri
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'sat' THEN col END) AS sat
,AVG(CASE WHEN ts (FORMAT 'eee') (CHAR(3)) = 'sun' THEN col END) AS sun
FROM tab
GROUP BY 1
ORDER BY 1
Btw, EXTRACT(DAY...)
doesn't return the day of week, it's the day of month, i.e. 1..31