|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
Задача: есть 2 таблицы: заголовки (header) и позиции (item) В таблице header есть показатель fact1. Нужно написать запрос: Код: sql 1. 2. 3. 4. 5. 6. 7.
который будет работать возвращать 35,33 для следующего набора данных: header_iditem_idfact111112123152415251526153790389039903109031190 То есть взять среднее значение для fact1 каждого заголовка. IQ 16. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 18:14 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
White Owl http://www.sql.ru/forum/844750/kak-zadavat-vopros какую функцию смотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2016, 18:36 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRST, не совсем понятно, в какой таблице какой набор данных храниться. можешь привести исходные наборы данных для каждой таблицы по отдельности, а не результат их джойна? но в целом, создается впечатление, что двигаться нужно начинать от таблицы header, а данные таблицы item использовать в качестве фильтра в секции where. Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
ну или в форме джойна: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 05:59 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
Таблица header: header_idfact111215390 таблица item: header_iditem_iddim111112123124125126137138139131013111 запрос: Код: sql 1.
не подходит, поскольку dim1 нужен в результирующем наборе данных. то есть нужно написать запрос который вернет: dim1avg(fact1)135.33 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 11:15 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRST, не скупись на тестовых данных. Приведи набор строк таблицы ITEM с разными DIM и покажи, как в этом случае должен выглядеть результат запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 11:17 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRST, пока (по уточненным данным) напрашивается такое: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 11:27 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, это не решает проблему, поля из item нужны в блоке select, но при этом агрегация avg по header.fact1 должна работать без учета строк из item. может так моя задача будет понятнее: Код: sql 1. 2. 3. 4. 5. 6.
посчитает среднее как 46,5 если на примере функции row_number(): Код: sql 1. 2. 3. 4. 5. 6. 7.
мне нужно среднее по строкам с row_num = 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 13:53 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRST, То есть, в итоге ты хочешь получить ВСЮ выборку, но расчет делать только по первым строкам групп? Тогда ещё раз - приведи репрезентативный юзабильный набор тестовых данных для обеих таблиц и желаемый результат на этих тестовых данных. Ибо по твоим отрывочным пояснениям не совсем понятно, какие именно значения полей тебе нужны и как всё это будет по итогу выглядеть в результирующей выборке ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 14:06 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
Добрый Э - Эх, Таблица header:idfact111215390 таблица item:header_idid111223242526373839310311 Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
результат:header_idavg_fact1требуемая_агрегация1112151539090 Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
результат:avg_fact1требуемая_агрегация46.5454545535.33333333 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 14:55 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRSTWhite Owl http://www.sql.ru/forum/844750/kak-zadavat-vopros какую функцию смотреть?Прочитай второй пункт. Внимательно прочитай. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 18:05 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
White Owl, скрипт на создание тестовых таблиц: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
стандартное среднее работает так: Код: sql 1. 2. 3. 4. 5. 6. 7.
avg( header.fact1 )46.54545454545455нужно, чтобы среднее считалось только по header (без учета того, сколько строк в item). То есть нужный результат:результат35.333333333333336 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 18:49 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRSTWhite Owl, скрипт на создание тестовых таблиц: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
стандартное среднее работает так: Код: sql 1. 2. 3. 4. 5. 6. 7.
avg( header.fact1 )46.54545454545455нужно, чтобы среднее считалось только по header (без учета того, сколько строк в item). То есть нужный результат:результат35.333333333333336на человеческом языке мне нужно вот что: есть счета фактуры, они хранятся в двух таблицах - данные заголовка и данные позиций. на уровне заголовка хранится некий показатель, этот показатель нужно анализировать в отчете с возможностью фильтра/развертки по продуктам/группам продуктов. Но при этом агрегация должна быть AVG по заголовкам. Другими словами, если в одной фактуре 10 продуктов группы 1, а в другой 1 продукт группы 1, и показатель по первой фактуре 100, а по второй 50, то агрегация должна рассчитаться равной 75, а не 95,45454545454545 надеюсь кто-то уже сталкивался с подобной задачей. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2016, 19:00 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRSTскрипт на создание тестовых таблицНу наконец-то. Это было так сложно? SQL_AVG_FROM_FIRSTнужно, чтобы среднее считалось только по header (без учета того, сколько строк в item). То есть нужный результат:результат35.333333333333336Ну и делаем без учета item Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 00:16 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
White Owl, Нужно с учетом item. В этом и есть основная сложность. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 11:13 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
В общем если я правильно понял, то функциональность "окон" не распространяется на AVG... То есть такую задачу решить на уровне БД нельзя. печаль. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 13:14 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRSTWhite Owl, Нужно с учетом item. В этом и есть основная сложность.Сначала ты говоришь что item не нужно учитывать. Теперь говоришь что нужно. Ты сам знаешь что ты хочешь???? SQL_AVG_FROM_FIRSTВ общем если я правильно понял, то функциональность "окон" не распространяется на AVG...Что за глупости? Мы OLAP еще не трогали, мы даже о группировке не вспоминали. Реши наконец что ты хочешь, сделай четкий пример данных и ясное описание желаемого результата. Тогда и будем смотреть что можно сделать в база данных, а для чего достаточно букварь прочитать: http://www.sql.ru/docs/sql/u_sql/ ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 17:19 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
White Owl, Таблицы для теста: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
Запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Результат:group_idheader_countheader_listfact1_listfact1322;350;10083.33333333333333213100100131;2;30;50;10061.111111111111114 Нужно:group_idheader_countheader_listfact1_listfact1322;350;100(50+100)/2=75213100100131;2;30;50;100(0+50+100)/3=50 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 18:35 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
Ох... теперь у тебя уже три исходные таблицы... Ну во первых, у тебя ошибка в задании product. Две строки с id=1, ну спишем это на опечатку... А во вторых, вот: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 19:23 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
White OwlОх... теперь у тебя уже три исходные таблицы...Их больше. У продукта 7 атрибутов. у остальных аналитик тоже есть атрибуты аналогично продукту... в общем подумаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2016, 22:49 |
|
SQL запрос со сложной агрегацией
|
|||
---|---|---|---|
#18+
SQL_AVG_FROM_FIRSTWhite OwlОх... теперь у тебя уже три исходные таблицы...Их больше. У продукта 7 атрибутов. у остальных аналитик тоже есть атрибуты аналогично продукту... в общем подумаю...Ну тогда забудь про одиночные SQL. Делай datamart'ы с полноценными кубами. Жить будет намного проще. Впрочем у тебя же IQ? Так что что-то в этом духе должно подразумеваться. Иначе, на аггрегациях через много таблиц просядешь по производительности до полного ой. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2016, 00:05 |
|
|
start [/forum/topic.php?fid=55&msg=39259872&tid=2009707]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 298ms |
0 / 0 |