|
Сумма по группе, которая удовлетворяет условию.
|
|||
---|---|---|---|
#18+
Друзья, добрый день! Обращаюсь за помощью, есть таблица (естественно упрощена, реальная под 500 млн строк). Суть вопроса, как сгруппировать и подсчитать сумму по номерам заказов, только тех заказов, которые содержат позицию "телефон". Делал данный запрос следующим образом - 1) находил номера заказов, которые содержат "телефон" 2) ставил фильтр только по этим заказам. На небольших данных кейс работает, но вот на больших, чувствую, что есть решение оптимальнее. Т.к. каждую из 500 млн строк, нужно сравнить с приблизительно 100 млн строк, которые содержат телефон. Есть ли более оптимальный способ? В sql новичок, прошу строго не судить. Заранее большое спасибо за помощь. Номер заказ Позиция Количество 111 Холодильник 1 111 Телефон 10 111 Утюг 2 222 Холодильник 1 222 Утюг 1 333 Телефон 4 333 Стиральная машина 2 333 Микроволновка 2 444 Плита 5 444 Утюг 2 555 Телефон 9 555 Ноутбук 1 555 Мультиварка 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 16:38 |
|
Сумма по группе, которая удовлетворяет условию.
|
|||
---|---|---|---|
#18+
EvgeniyYYY, Боюсь спросить, а у вас что, поле "Позиция" содержит текстовые значения, т.е. прямо так и прописано в табличке, буквами - "Телефон", "Холодильник"? И так все 500 миллионов (!) строк?! Пока не поздно, переделывайте БД, выносите номенклатуру в отдельную таблицу (справочник), а в основной храните идентификаторы каждой позиции из таблицы справочника. У вас индекс создан для поля "Позиция"? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 17:41 |
|
|
start [/forum/topic.php?fid=47&fpage=9&tid=1828097]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 155ms |
0 / 0 |