Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение больше двух таблиц / 9 сообщений из 9, страница 1 из 1
18.09.2019, 22:24
    #39863618
Marisolka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
Всем добрый день!
Есть несколько однотипных таблиц. Например,
Таблица1
Номер месяца Показатель11 41 51 32 52 53 33 4
Таблица2
Номер месяца Показатель21 51 52 12 23 3
Таблица3
Номер месяца Показатель31 12 22 23 23 5
Нужно создать таблицу, которая включает в себя все три показателя в среднем за месяц, т.е.
Номер месяца средний пок-ль1 средний пок-ль2средний пок-ль31 4 5 12 5 1,5 23 3,5 3 3,5

Какой SQL запрос лучше написать?
...
Рейтинг: 0 / 0
18.09.2019, 22:47
    #39863623
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
MarisolkaКакой SQL запрос лучше написать?
лучше всего будет самый производительный и писать к тому-же нужно правильный.

в общих чертах: сначала сделать словарь/изм. месяцев и к нему уже
цеплять агрегации показателей фунцией AVG(так среднее называется по англ.)
...
Рейтинг: 0 / 0
18.09.2019, 23:33
    #39863631
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
MarisolkaНужно создать таблицу,
...
Какой SQL запрос лучше написать?Таблицы создаются SQL запросами "CREATE TABLE"
...
Рейтинг: 0 / 0
19.09.2019, 07:15
    #39863660
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
MarisolkaКакой SQL запрос лучше написать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select t.m, max(v1), max(v2), max(v3)
from
(
select t.m, avg(t.value) v1, null v2, null v3
  from t1 t
 group by t.m
union allselect t.m, null v1, avg(t.value) v2, null v3
  from t2 t
 group by t.m
union allselect t.m, null v1, null v2, avg(t.value) v3
  from t3 t
 group by t.m
) t
 group by t.m
...
Рейтинг: 0 / 0
19.09.2019, 07:20
    #39863663
Max_Хацкер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
Например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
;WITH Months AS ( --список месяцев
SELECT [Номер месяца] FROM Таблица1
UNION
SELECT [Номер месяца] FROM Таблица1
UNION
SELECT [Номер месяца] FROM Таблица1)
SELECT m.[Номер месяца]
      ,AVG(t1.[Показатель1]) AS [СреднийПоказатель1]
      ,AVG(t2.[Показатель1]) AS [СреднийПоказатель2]
      ,AVG(t3.[Показатель1]) AS [СреднийПоказатель3]
FROM Months m
  LEFT OUTER JOIN [Таблица1] t1 ON t1.[Номер месяца] = m.[Номер месяца]
  LEFT OUTER JOIN [Таблица2] t2 ON t2.[Номер месяца] = m.[Номер месяца]
  LEFT OUTER JOIN [Таблица3] t3 ON t3.[Номер месяца] = m.[Номер месяца]
GROUP BY m.[Номер месяца]



Из-за LEFT JOIN-ов надо ещё придумать что с NULL делать, но мне лень. :)
...
Рейтинг: 0 / 0
19.09.2019, 17:58
    #39864140
Marisolka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
Написала такой запрос:
SELECT AVG(t1.Показатель11) as cv1, t1.Номер_месяца, AVG(cv2), AVG(cv4)
From Таблица1 t1
left join
(Select t2.Номер_месяца, AVG(t2.Показатель2) as cv2, AVG(cv3) as cv4
from Таблица2 t2
left join
(Select t3.Номер_месяца, AVG(t3.Показатель3) as cv3
from Таблица3 t3
Group by t3.Номер_месяца) t3
on t2.Номер_месяца=t3.Номер_месяца
Group by t2.Номер_месяца) t4
on t4.Номер_месяца=t1.Номер_месяца
Group by t1.Номер_месяца

Просто думаю, может что-то легче есть.....
...
Рейтинг: 0 / 0
19.09.2019, 18:44
    #39864171
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
MarisolkaНаписала такой запрос:
SELECT AVG(t1.Показатель11) as cv1, t1.Номер_месяца, AVG(cv2), AVG(cv4)
From Таблица1 t1
left join
(Select t2.Номер_месяца, AVG(t2.Показатель2) as cv2, AVG(cv3) as cv4
from Таблица2 t2
left join
(Select t3.Номер_месяца, AVG(t3.Показатель3) as cv3
from Таблица3 t3
Group by t3.Номер_месяца) t3
on t2.Номер_месяца=t3.Номер_месяца
Group by t2.Номер_месяца) t4
on t4.Номер_месяца=t1.Номер_месяца
Group by t1.Номер_месяца

Просто думаю, может что-то легче есть.....покрути мой запрос, оцени
...
Рейтинг: 0 / 0
24.09.2019, 17:55
    #39866547
Marisolka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
andreymx,
Спасибо!
...
Рейтинг: 0 / 0
24.09.2019, 18:49
    #39866568
Charles Weyland
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение больше двух таблиц
Объединить все таблицы с помощью UNION ALL, а затем применить конструкцию PIVOT
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение больше двух таблиц / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]