|
Упростить запрос
|
|||
---|---|---|---|
#18+
Добрый день! Как можно избавиться от 4х однотипных подзапросов в следующем запросе: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Суть: выбрать все типы заявок i.name из таблицы issues i . Далее из таблицы заявок requests r подсчитать кол-во однотипных заявок, зарегистрированных пользователем (из таблицы users u ), который числится в одном из 4х отделов ( u.id_department =1..4), с разбивкой по отделам. Пример результата: namecnt_1cnt_2cnt_3cnt_4тип заявки №10000тип заявки №20001тип заявки №30100тип заявки №41000 Для тестовых таблиц: users idid_departmentname34Тестов В.Н.282Иванов Л.А.291Петров И.Ю. issues idname1тип заявки №12тип заявки №23тип заявки №34тип заявки №4 requests idid_issueid_user_opened12323283429 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2021, 14:40 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
Не просто можно. Нужно. Связать все три таблицы. И считать SUM(u.id_department=X) AS sum_X ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 12:49 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
Akina, спасибо за подсказку! Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я правильно понял, так? Дает нужный результат, еще более упростить вроде нельзя... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 13:31 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
С формальной точки зрения группировать надо всё-таки по i.name . Либо, если построитель не справится, по i.id, i.name . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 19:57 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
Akina С формальной точки зрения группировать надо всё-таки по i.name . Либо, если построитель не справится, по i.id, i.name . А есть ли смысл, если по i.id первичный ключ, а i.name уникально? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 20:10 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
LiYing i.name уникально ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 20:17 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
miksoft LiYing i.name уникально Эээ..., а причем тут JOIN? Я имел в виду в таблице уникально. Чего я не понимаю, объясните плиз. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 20:21 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
LiYing miksoft пропущено... Это после JOIN-а то ? Эээ..., а причем тут JOIN? Я имел в виду в таблице уникально. Чего я не понимаю, объясните плиз. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 20:26 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
miksoft JOIN может размножить записи. И i.name перестанет быть уникальным. Как можно смоделировать такую ситуацию, не подскажете? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 20:37 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
LiYing miksoft JOIN может размножить записи. И i.name перестанет быть уникальным. Как можно смоделировать такую ситуацию, не подскажете? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2021, 23:10 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
miksoft LiYing пропущено... Как можно смоделировать такую ситуацию, не подскажете? Вопрос: неуникальным где? Для теста добавил в issues еще 3 записи, а в requests две. Если в таблице requests в поле id_user_opened проставить всем один id , то оба запроса (разница в поле группировки): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
дают одинаковый результат. Но explain у них разный (по i.name индекса нет): #1 idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra1SIMPLEiNULLindexPRIMARYPRIMARY4NULL6100.00NULL1SIMPLErNULLrefid_issueid_issue5call_center.i.id1100.00NULL1SIMPLEuNULLeq_refPRIMARYPRIMARY4call_center.r.id_user_opened1100.00NULL #2 idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra1SIMPLEiNULLALLNULLNULLNULLNULL6100.00Using temporary1SIMPLErNULLrefid_issueid_issue5call_center.i.id1100.00NULL1SIMPLEuNULLeq_refPRIMARYPRIMARY4call_center.r.id_user_opened1100.00NULL Поймите меня правильно - я "не докапываюсь", просто пытаюсь разобраться... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 10:56 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
Но explain у них разный (по i.name индекса нет): Вот я и говорю, что построитель может не справиться. А есть ли смысл, если по i.id первичный ключ, а i.name уникально? Формально - выходное выражение либо входит в выражение группировки, либо является аргументом агрегатной функции. И первичный ключ, группирующий по другим полям таблицы - это не стандарт, а расширение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 12:46 |
|
Упростить запрос
|
|||
---|---|---|---|
#18+
Akina Формально - выходное выражение либо входит в выражение группировки, либо является аргументом агрегатной функции. И первичный ключ, группирующий по другим полям таблицы - это не стандарт, а расширение. Формально - да, но фактически выходит, что группировка по первичному ключу отрабатывает на 100% верно в данном запросе. По-крайней мере, какие бы вариации исходных таблиц я не пробовал, результат при GROUP BY i.id и GROUP BY i.name одинаков. И план при этом предпочтительнее получается для GROUP BY i.id. Но формально запрос некорректен, уфф... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2021, 13:03 |
|
|
start [/forum/topic.php?fid=47&msg=40084254&tid=1828006]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
172ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 295ms |
0 / 0 |