Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Добрый день, Знатоки SQL! Сейчас в интернете часто встречается использование групповых (или сгруппированных) фильтров. Как по ним организовать выборку? Вот максимально упрощённый вариант T-SQL кода: Код: 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. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 14:10 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
ВладимирЛКак составить запрос в один запрос? Решается ли задача в один запрос? Схематично: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 14:44 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Akina, Уточнение-вопрос: Конструкция WHERE (p.type, p.value) IN ( ('type1', 'value1'), .. , ('typeN', 'valueN') ) вроде как не из T-SQL? В "транзакте" с левой стороны IN допускается только один параметр(?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:06 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
AkinaВладимирЛКак составить запрос в один запрос? Решается ли задача в один запрос? Схематично: Код: sql 1. 2. 3. 4. 5. 6. В T-SQL так нельзя. Однако, есть же EXISTS() и INTERSECT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:06 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
iapОднако, есть же EXISTS() и INTERSECTМожет, даже NOT EXISTS(SELECT ... EXCEPT SELECT ... EXCEPT SELECT .........) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:08 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
iap, Вот так сработало: Select M.* From @tbMain As M inner join @tbManyToMany as MM on M.idMain = MM.idMain inner join @tbFilter F on MM.idFilter = F.idFilter where (F.nameFilter = 'Код' and F.value in (100, 200) ) INTERSECT Select M.* From @tbMain As M inner join @tbManyToMany as MM on M.idMain = MM.idMain inner join @tbFilter F on MM.idFilter = F.idFilter where (F.nameFilter = 'Год' and F.value in (2017) ) Но здесь все-таки два SELECT, а как в одном? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:16 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
ВладимирЛКонструкция Код: sql 1. вроде как не из T-SQL? Вам слово "схематично" ни о чём не говорит? и да, в T-SQL это развернётся в показанное Вами же ВладимирЛ Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:17 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
ВладимирЛ, можно же переписать запрос Akina с помощью явного сравнения пар type и value и операторов AND и OR. Длинное будет условие, зато SELECT - один! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:19 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Akina, Да, спасибо за ответ. На "схематично" я, конечно, обратил внимание. Но если бы все было так просто, я бы не задавал вопрос. Упрощаем запрос до одной таблицы: Select M.* From @tbMain As M where p1 in (100,200) and p2 in (2017) И вот так работает, поскольку условие наложено на два поля таблицы. А в том, что я написал - условие накладывается на (схематично) одно поле, поэтому по or оно возвращает больше, чем надо, а по and вообще ничего не возвращает. То есть, опять же схематично - сначала должен отработать первый фильтр, а потом на его результат належится следующий фильтр. Как это сделать одним SELECTом я не знаю. Возможно, задача не решаема. Там нюанс в том, что используется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:30 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
ВладимирЛпо or оно возвращает больше, чем надоТо есть группировку и пост-отбор Вы в моей схеме не увидели? а именно они обеспечивают решение задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:41 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Akina, Ну вот запрос с группировкой: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Возвращает: 1 100 2017 2 100 2017 3 200 2017 4 200 2018 А годик то указан 2017 ???? Вот в этом и заковыка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:51 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Нет, вот что Вы хотите, если у Вас в списке вывода - уникальный индекс??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:52 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Да и HAVING я как-то не наблюдаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 15:53 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Akina, Без "ключа" вот так: 100 2017 200 2017 200 2018 то есть 2018 все равно есть, поэтому "оно" не принципиально. А что даёт это условие: HAVING COUNT(*) = N в частности я не совсем понимаю параметр N. (в T-SQL такого нет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 16:04 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
ВладимирЛв частности я не совсем понимаю параметр NОбрати внимание на условие отбора - там указаны наборы условий с номерами от 1 до N. Вот это N и должно быть в запросе. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 16:32 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Akina, Спасибо за ответ, осмысливаю. Вообще то - COUNT(*) - это количество записей по возвращаемым строкам группировки и как оно связано с номером условий? В общем пока непонятно, осмысливаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 16:50 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
ВладимирЛкак оно связано с номером условий?не с номером, а с их количеством. Тебе же надо, чтобы запись соответствовала ВСЕМ фильтрам? COUNT(*) тебе как раз и показывает, сколько фильтров из всех соответствуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 16:56 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Akina, Вот запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Вот его результат: 100 2017 4 200 2017 2 200 2018 1 Правый столбец - это и есть количество возвращаемых записей по группировке "M.p1, M.p2". С количеством условий вроде как никак не связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2018, 17:06 |
|
||
|
Выборка по групповым фильтрам (простой вопрос Знатокам SQL по обычному Select)
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2018, 16:10 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39600697&tid=1690294]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 363ms |

| 0 / 0 |
