powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Сложный запрос на поиск среднего значения
4 сообщений из 4, страница 1 из 1
Сложный запрос на поиск среднего значения
    #39199885
EvgeniyChuchkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Создаем таблицу
create table kash (
id integer primary key,
id_mo integer not null,
id_posel integer not null,
id_org integer not null,
A_80 integer);

insert into kash values ( 1, 1, 1, 1, 24.50 );
insert into kash values ( 2, 1, 1, 1, 24.44 );
insert into kash values ( 3, 1, 1, 2, 24.23 );
insert into kash values ( 4, 1, 1, 2, 24.12 );
insert into kash values ( 5, 1, 2, 3, 25.11 );
insert into kash values ( 6, 1, 2, 3, 25.12 );
insert into kash values ( 7, 2, 3, 4, 24.44 );
insert into kash values ( 8, 2, 3, 4, 24.77 );

2. Что хочу получить?
Нужно создать запрос отражающий:
максимальное значение по столбцу kash.A_80
минимальное значение по столбцу kash.A_80
среднее значение по столбцу kash.A_80
группируя по kash.id_mo

Казалось бы задача простая
select
max(A_80),
min(A_80),
avg(A_80),
from kash
group by kash.id_mo

но вот средняя величина должна быть не простая арефмитическая а несколько сложная
- нужно вывести сперва вывести среднюю по группам записей имеющих одинаковые id_org, id_posel, id_mo
- потом из полученных записей вывести среднюю из группы имеющих одинаковые id_posel, id_mo
- а уж потом вывести среднюю из полученных записей группируя по id_mo

порядок расчета
а) форимруются средние:
(1 и 2 записи) = 24,47
(3 и 4 записи) = 24,175
(5 и 6 записи) = 25,115
(7 и 8 записи) = 24,605
б) форируются средние из средних а)
(1, 2, среднеи значения из пункта а) = 24,3225
(3 запись из пункта а) = 25,115
(4 запись из пункта а) = 24,605
в) финальная группировка с выбором среднего значения из средних б)
(1, 2, среднеи значения из пункта б) = 24,718
(3 запись из пункта б) = 24,605

3. В результате итог должен выглядеть так (с учетом первоначальных условий):

id_mo max(A_80) min(A_80) avg(A_80)
1 25,12 24,12 24,718
2 24,77 24,44 24,605


среднее которое нужно получить в группе 1 = (24,718) отличается от простейего арифметического (24,586)
...
Рейтинг: 0 / 0
Сложный запрос на поиск среднего значения
    #39199933
MrCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, не равно, со всеми бывает. (a+b+c)/3 тоже не равно ((a + b)/2 + c)/2.

Используйте запрос вида SELECT from (SELECT) GROUP BY и попутного ветра во все ночные паруса, что ли.
...
Рейтинг: 0 / 0
Сложный запрос на поиск среднего значения
    #39200042
EvgeniyChuchkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrCat,
А можно поподробнее?
...
Рейтинг: 0 / 0
Сложный запрос на поиск среднего значения
    #39200045
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотреть в сторону with: http://sqlite.org/lang_with.html
Это позволит делать запрос по результатам запроса. То есть следуя указанному алгоритму это будет:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with
a1(id_mo, id_posel, id_org, a_80) as (
 select id_mo, id_posel, id_org, avg(a_80)
 from kash
 group by id_mo, id_posel, id_org
),
a2(id_mo, id_posel, a_80) as (
 select id_mo, id_posel, avg(a_80) as a_80
 from a1
 group by id_mo, id_posel
)
select a2.id_mo, max(kash.a_80), min(kash.a_80), avg(a2.a_80)
from a2
join kash on a2.id_mo=kash.id_mo
group by a2.id_mo
;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Сложный запрос на поиск среднего значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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