|
Вопрос по GROUP BY
|
|||
---|---|---|---|
#18+
Здравствуйте. Стоит задача вытащить все записи приёмов у врача людей в возрасте 18+, 65 лет мужчины, 65 лет женщины, >65 лет мужчины, >65 лет женщины по заданному периоду времени. Мой запрос выглядит так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Где таблица www_insured содежит людей, а таблица www_dn_info содержит приёмы у врача данных людей. Group by работает по следующему принципу: Так как люди в возрасте 65 лет и люди возрастом больше 65 лет входят в множество >18 лет, то из общего количества >18 лет почему-то вычитаются результаты других групп возрастов. Как написать запрос так, чтобы при группировки цифры соответствовали реальному количеству людей 18+. P.S. Кстати, если в CASE строчку "when extract(year from current_date) - extract(year from e.dr) >= 18 then 'Всего взрослых (в возрасте 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. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
В этом случае цифры соответствуют действительности. Но он выполняется соответственно в 5 раз дольше. И довольно не гибкий при дальнейшей работе с ним. Ну и вопрос. Посоветуйте можно ли как-то модернизировать первый запрос, чтобы цифры соответствовали действительности. Или есть ли альтернативные пути решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 09:12 |
|
Вопрос по GROUP BY
|
|||
---|---|---|---|
#18+
Explosion, зачем в названиях групп указывать пол, если вы его выводите отдельным полем и ещё группируете? Я бы в ваших группах сразу добавил условие фильтрации по полу, и убрал его вывод в качестве отдельного столбца Ну и i.year_period = 2019 засунул в where ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 09:28 |
|
Вопрос по GROUP BY
|
|||
---|---|---|---|
#18+
Не до конца отредактировал для поста. В моих реалиях больше условий и полей. И может быть ситуация, когда появится необходимость вывести 65+ людей для другого года или месяца. Поэтому условия прописаны в select. В общем по вашему способу отредактировал (один фиг на правильность не повлияет): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 09:38 |
|
Вопрос по GROUP BY
|
|||
---|---|---|---|
#18+
Explosion, тьфу блин неверно посмотрел на ваш запрос. Видать не проснулся ещё. Конечно же он не верно работает. Всего взрослых (в возрасте 18 лет и старше) надо считать отдельно. Грубо говоря делайте отдельный запрос по учёту групп разбитых по возрастным не пересекающимся категориям, а потом объединяйте его UNION ALL с запросом который считает для старше 18 лет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 09:57 |
|
Вопрос по GROUP BY
|
|||
---|---|---|---|
#18+
Explosion, Код: 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.
будет медленней всего в 2 раза, а не в 5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2019, 10:02 |
|
|
start [/forum/topic.php?fid=40&fpage=21&tid=1560628]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 264ms |
total: | 393ms |
0 / 0 |