|
Сложный запрос на поиск среднего значения
|
|||
---|---|---|---|
#18+
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) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 15:59 |
|
Сложный запрос на поиск среднего значения
|
|||
---|---|---|---|
#18+
Ну, не равно, со всеми бывает. (a+b+c)/3 тоже не равно ((a + b)/2 + c)/2. Используйте запрос вида SELECT from (SELECT) GROUP BY и попутного ветра во все ночные паруса, что ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 16:47 |
|
Сложный запрос на поиск среднего значения
|
|||
---|---|---|---|
#18+
MrCat, А можно поподробнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 18:39 |
|
Сложный запрос на поиск среднего значения
|
|||
---|---|---|---|
#18+
Смотреть в сторону with: http://sqlite.org/lang_with.html Это позволит делать запрос по результатам запроса. То есть следуя указанному алгоритму это будет: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2016, 18:41 |
|
|
start [/forum/topic.php?fid=54&tid=2008610]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 269ms |
total: | 391ms |
0 / 0 |