SQL - суммировать результаты из нескольких таблиц

У меня есть следующий простой SQL-запрос, который мне нужно запустить на 3 таблицах:

SELECT 
A.date,
SUM(A.number)
FROM A
GROUP BY
A.date

Но у меня есть две другие таблицы (B и C), для которых я хочу выполнить тот же запрос. И объедините результаты в одну таблицу в качестве вывода.

Я ожидаю, что вывод будет выглядеть примерно так:

дата Число B.номер C.номер 2022 12322.1 9999999 888888
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
0
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Мы можем попробовать следующий подход к объединению:

SELECT
    date,
    SUM(CASE WHEN src = 'A' THEN number ELSE 0 END) AS A_sum,
    SUM(CASE WHEN src = 'B' THEN number ELSE 0 END) AS B_sum,
    SUM(CASE WHEN src = 'C' THEN number ELSE 0 END) AS C_sum
FROM
(
    SELECT date, number, 'A' AS src FROM A
    UNION ALL
    SELECT date, number, 'B' FROM B
    UNION ALL
    SELECT date, number, 'C' FROM C
) t
GROUP BY date
ORDER BY date;

Вот мой подход:

Create Table TableA
(
Dates Date,
Number Int
)
GO

Create Table TableB
(
Dates Date,
Number Int
)
GO

Create Table TableC
(
Dates Date,
Number Int
)
GO

Insert Into TableA
Values ('2023-01-01', 100000),
('2023-01-02',30000)
GO

Insert Into TableB
Values ('2023-01-01', 200000),
('2023-01-02',10000)
GO

Insert Into TableC
Values ('2023-01-01', 400000),
('2023-01-02',20000)
GO


SELECT * from 
(
Select *,'A' Det from TableA
UNION ALL
Select *,'B' from TableB
UNION ALL
Select *,'C' from TableC
)ABC
PIVOT 
(SUM(ABC.Number) FOR Det IN (A,B,C))
XYZ

DROP TABLE TableA
DROP Table TableB
DROP table TableC

Вы уверены, что Amazon Athena поддерживает PIVOT?

Larnu 06.02.2023 13:36

Ааа... Извините, я неправильно понял это требование, спасибо за его уточнение.

Raiyug 06.02.2023 17:16

Лучший вариант IMO - сначала создать календарь, а затем оставить созданный календарь с разными таблицами:

Календарь важен для сбора данных из соединения.

И это довольно странно, если у вас есть дата столбца как год. На мой взгляд, это небольшой уровень сложности.

Но ладно. Допустим, у вас есть только год.

Создайте таблицу с годами.

Create Table Years
(
years int
)

следующий:

INSERT INTO Years(years )
VALUES 
(2022),(2021),(2020),(2019),(2018),(2017),(2016),(2015)

например.

SELECT 
y.*,
sum(a.number) as SumA,
sum(b.number) as SumB,
sum(c.number) as SumC

FROM Years as y
left join
table_a a
on
y.years=a.date
left join 
table_b b
on
y.years=b.date
left join
table_c c
on
y.years=c.date

GROUP BY
y.years

Надеюсь, это поможет!

Пожалуйста, дайте мне знать, если это работает, как вы хотели.

Другие вопросы по теме