|
|
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Например, есть таблица Возраст Кол-во1810181520522103114346 1.Как в SQL сделать группировку по возрасту, например, с шагом 5? Возраст Кол-во15-202520-251530-351435-406 2. Как сделать группировку по возрасту, например, различными шагами? Т.е. до 18 лет, с 18 до 25, с 25 до 45 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 00:02 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Marisolka, Сделайте новую колонку в запросе с помощью Case и назовите её AgeGroup. PS : должно по идее быть в любом курсе по SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 00:31 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
MarisolkaТ.е. до 18 лет, с 18 до 25, с 25 до 45 и т.д. 1. Round(Кол-во/5,0) 2. "и т.д." в данном конкретном случае не работает. Ряд логически не продолжается. А так - Case. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 04:18 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 04:43 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
То-же метод, но Case проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 05:26 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
+ вместо null я ставлю 999 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 05:28 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
MarisolkaКак сделать группировку по возрасту, например, различными шагами? Т.е. до 18 лет, с 18 до 25, с 25 до 45 и т.д. Самое разумное - завести таблицу с диапазонами возрастов (идНабора-возрастОт-возрастДо), и использовать ее как источник данных для группировки. В ней можно хранить неограниченное количество наборов - и равномерных. и кастомных... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 08:20 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Marisolka, Если возраст целочисленный, то начало периода будет Возраст / 5 * 5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 09:13 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Marisolka, Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 10:44 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Покороче, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 10:54 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Решение с таблицей групп возрастов наилучшее, т.к. является data-driven, а не code-driven. Оптимальным для реляционных баз является решение, при котором результат запроса зависит от данных, а не от кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 13:50 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Marisolka, посмотрите на этом форуме темы "гистограмма", там есть варианты решения вашей задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2019, 22:56 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовРешение с таблицей групп возрастов наилучшее, т.к. является data-driven, а не code-driven. Оптимальным для реляционных баз является решение, при котором результат запроса зависит от данных, а не от кода. Оно конечно в теории верно, но на практике зачастую подобную задачу приходится решать в некой системе отчетности, где заведение и хранение таблиц не предусмотрено, а к рабочей базе доступ только на чтение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 13:05 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
982183, в случае изменения диапазона возрастов, например, придется переписывать и публиковать код. Такой подход популярен, но это не pro. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 13:17 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
А в альтернативе надо создавать интерфейс ввода таблиц, их контроля права доступа к ним. Зачастую оно того не стоит. А современные пользователи откорректировать правильно составленный код вполне в состоянии. И многие "конструкторы отчетов" это замечательно позволяют делать. Хотя конечно способ с таблицей более "прогрессивен" и правилен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 13:46 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
982183А в альтернативе надо создавать интерфейс ввода таблиц, их контроля права доступа к ним.Не обязательно, если коррекция справочника предполагается раз в несколько месяцев/лет. Но разработчикам будет проще править такой справочник, чем искать место, где, например, "Если возраст целочисленный, то начало периода будет Возраст / 5 * 5", а потом, если возникнет потребность изменить диапазон, впендюривать туда сложную формулу в CASE, по инерции. Притом, что очень плохо, таких мест будет несколько (разные отчёты, интерфейсы), и, конечно, никто не булдет понимать ,что из этого используется, а что нет, поэтому придётся править и те 90% запросов, которые не используются. В общем, что бы не делать справочник, нужно очень веское обоснование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 14:41 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Обычно такого рода таблицы находятся в зоне ответственности группы эксплуатации. По если ПО пишется для мелкоофисной работы, то создается интерфейс. Существуют еще и аналитические системы, но там другой случай, т.к. активно используется парадигма функционального программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 14:56 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
"Группа эксплуатации" - это одно, а рисовальщики отчетов - совсем другое. И не всегда у них есть соответствующие права и полномочия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 16:22 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
alexeyvg982183А в альтернативе надо создавать интерфейс ввода таблиц, их контроля права доступа к ним.Не обязательно, если коррекция справочника предполагается раз в несколько месяцев/лет. Но разработчикам будет проще править такой справочник, чем искать место, где, например, "Если возраст целочисленный, то начало периода будет Возраст / * 5", а потом, если возникнет потребность изменить диапазон, впендюривать туда сложную формулу в CASE, по инерции. Притом, что очень плохо, таких мест будет несколько (разные отчёты, интерфейсы), и, конечно, никто не булдет понимать ,что из этого используется, а что нет, поэтому придётся править и те 90% запросов, которые не используются. В общем, что бы не делать справочник, нужно очень веское обоснование. Вы же понимаете, что вот эту "5", так же можно вынести в соответствующий справочник при необходимости и рулить им? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 17:16 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Кодд со товарищи писал, что все данные должны находиться в таблицах. И вся теория, на основе которой написана математика сервера БД, строится вокруг этого. Поэтому любые отступления снижают производительность запросов. Другое дело, что в народе популярно использовать "против лома нет приёма", т.е. наращивать аппаратную мощь. А поэтому можно халтурить или не знать основные принципы, ишак же везёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 17:52 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовПоэтому любые отступления снижают производительность запросов. И вы можете это доказать сравнительными тестами варианта "Возраст / 5 * 5" и варианта "джойн на таблицу диапазонов"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 18:00 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Marisolka2. Как сделать группировку по возрасту, например, различными шагами? Т.е. до 18 лет, с 18 до 25, с 25 до 45 и т.д. Используйте OLAP кубы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 18:38 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
msLexalexeyvgВ общем, что бы не делать справочник, нужно очень веское обоснование. Вы же понимаете, что вот эту "5", так же можно вынести в соответствующий справочник при необходимости и рулить им?Формулу в справочник, и потом динамически строить запросы? Понимаю, но мне этот вариант кажется ещё ужаснее, я его не рассматривал всерьёз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 19:04 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
alexeyvgmsLexпропущено... Вы же понимаете, что вот эту "5", так же можно вынести в соответствующий справочник при необходимости и рулить им?Формулу в справочник, и потом динамически строить запросы? Понимаю, но мне этот вариант кажется ещё ужаснее, я его не рассматривал всерьёз. Зачем формулу, просто "шаг" группировки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 19:15 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
msLexalexeyvgпропущено... Формулу в справочник, и потом динамически строить запросы? Понимаю, но мне этот вариант кажется ещё ужаснее, я его не рассматривал всерьёз. Зачем формулу, просто "шаг" группировкиШаг не имеет смысла, по тем причинам, которые я описал в посте, на который вы ответили. Я же писал не про "куда засунуть цифру 5", а про то, что плохо раскидывать по приложению множество одинаковых формул, для одного и того же расчёта, их будет трудно читать, потом программисты будут их неоптимально менять (иногда слишком усложняя), да ещё и во многих местах. Намного проще сделать справочник групп возрастов. Или хотя бы справочник в коде, как 21996207 - это придётся менять во многих местах, но хотя бы логика будет прозрачная, и в сравнении исходников тоже будет всё прозрачно - что было, и что стало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 19:59 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
alexeyvgmsLexпропущено... Зачем формулу, просто "шаг" группировкиШаг не имеет смысла, по тем причинам, которые я описал в посте, на который вы ответили. Я же писал не про "куда засунуть цифру 5", а про то, что плохо раскидывать по приложению множество одинаковых формул, для одного и того же расчёта, их будет трудно читать, потом программисты будут их неоптимально менять (иногда слишком усложняя), да ещё и во многих местах. Намного проще сделать справочник групп возрастов. Или хотя бы справочник в коде, как 21996207 - это придётся менять во многих местах, но хотя бы логика будет прозрачная, и в сравнении исходников тоже будет всё прозрачно - что было, и что стало. Странно, а формулу клочиство*цена тоже нельзя нигде писать в коде? Вместо неё нужно использовать джойн на таблицу предрасчитанных результатов бинарных операций? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 21:23 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
msLexalexeyvgШаг не имеет смысла, по тем причинам, которые я описал в посте, на который вы ответили. Я же писал не про "куда засунуть цифру 5", а про то, что плохо раскидывать по приложению множество одинаковых формул, для одного и того же расчёта, их будет трудно читать, потом программисты будут их неоптимально менять (иногда слишком усложняя), да ещё и во многих местах. Намного проще сделать справочник групп возрастов. Или хотя бы справочник в коде, как 21996207 - это придётся менять во многих местах, но хотя бы логика будет прозрачная, и в сравнении исходников тоже будет всё прозрачно - что было, и что стало. Странно, а формулу клочиство*цена тоже нельзя нигде писать в коде? Вместо неё нужно использовать джойн на таблицу предрасчитанных результатов бинарных операций?количество*цена можно. Но более сложные расчёты иногда стараются как то централизовать, что бы не размазывать по коду. По моему, разница между умножением количества на цену, или справочниками, типа справочника НДС, справочника диапазонов для прогрессивного налогообложения, справочников возрастов, вроде очевидна. Неужели вы серьёзно считаете, что справочники не нужны, а лучше закодить это "Возраст / 5 * 5" прямо в десятке запросов, не забывая приводить к int (а так же придумывая похожие формулы для разных диапазонов)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 21:40 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
ТС задал два вопроса: 1.Как в SQL сделать группировку по возрасту, например, с шагом 5 ? 2. Как сделать группировку по возрасту, например, различными шагами ? Т.е. до 18 лет, с 18 до 25, с 25 до 45 и т.д. Во втором случае записать формулу проблематично. Но почему-то так долго обсуждается формула и ее место в запросе. Потом окажется, что результат нужно представить "горизонтально". Это было рассмотрено в 16671431 , как ответ одному уважаемому мной человеку на беседу в 16535446 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2019, 21:43 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
msLex, очевидно, что функция показывает правильный результат, как и запрос с таблицей. Но работают они используя разные принципы. Разработчик БД, использующий в первую очередь приемы функционального и процедурного программирования против возможности организации данных в таблицах и использования запросов должен понимать последствия решений. Например, для домашнего использования подход с изменением формул расчетов по трудозатратам сопоставим с изменением содержимого таблиц и цена ошибки невысока, но при промышленной эксплуатации на изменение кода накладывается множество ограничений, касающихся производительности, возможности публикации, повышения стоимости ошибки, скорость внедрения изменений и так далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 12:45 |
|
||
|
Как в SQL сгруппировать значения с определенным шагом?
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовmsLex, очевидно, что функция показывает правильный результат, как и запрос с таблицей. Но работают они используя разные принципы. Разработчик БД, использующий в первую очередь приемы функционального и процедурного программирования против возможности организации данных в таблицах и использования запросов должен понимать последствия решений. Например, для домашнего использования подход с изменением формул расчетов по трудозатратам сопоставим с изменением содержимого таблиц и цена ошибки невысока, но при промышленной эксплуатации на изменение кода накладывается множество ограничений, касающихся производительности, возможности публикации, повышения стоимости ошибки, скорость внедрения изменений и так далее. Вы путаетесь в показаниях, сначала писали про производительность, теперь про поддержку кода. Давайте разбираться по пунктам. Так что там с производительностью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.10.2019, 13:09 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1687097]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
158ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 481ms |

| 0 / 0 |
