SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.04.2021 16:27:47

OblivionR
Участник
Зарегистрирован: 23.04.2021
Сообщений: 3

Сумма по группе, которая удовлетворяет условию.

Друзья, добрый день!
Обращаюсь за помощью, есть таблица (естественно упрощена, реальная под 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

Отредактированно OblivionR (23.04.2021 16:28:51)

Неактивен

 

#2 23.04.2021 16:52:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5838

Re: Сумма по группе, которая удовлетворяет условию.

1. что должен вернуть запрос на этих тестовых данных (не ясно о каких сумме  и телефоне идет речь)?
2. какая версия mysql?

Неактивен

 

#3 23.04.2021 16:58:13

OblivionR
Участник
Зарегистрирован: 23.04.2021
Сообщений: 3

Re: Сумма по группе, которая удовлетворяет условию.

vasya, запрос на t-sql.
Вернуть должно следующее:
Заказ     Сумма
111        13
222         0 (т.к. заказ не содержит телефон)
333         8
444         0 (т.к. заказ не содержит телефон)
555         11

сумма - 32

Неактивен

 

#4 23.04.2021 17:15:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5838

Re: Сумма по группе, которая удовлетворяет условию.

select  `Номер заказ` as `Заказ`, sum(`Количество`) as `Сумма` from `таблица` where `Номер заказ` in (select `Номер заказ` from `таблица` where `Позиция`='телефон') group by 1 with rollup;


До 8-ки in-подзапрос нужно переписывать через join
ну и индексы должны быть для быстрой работы

Неактивен

 

#5 23.04.2021 17:17:35

OblivionR
Участник
Зарегистрирован: 23.04.2021
Сообщений: 3

Re: Сумма по группе, которая удовлетворяет условию.

vasya,  я написал в теме, что так уже делал, но это слишком долго "Делал данный запрос следующим образом - 1) находил номера заказов, которые содержат "телефон" 2) ставил фильтр только по этим заказам....."

Неактивен

 

#6 23.04.2021 17:21:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5838

Re: Сумма по группе, которая удовлетворяет условию.

скорость зависит от версии и наличия индексов
какая у вас версия?
какие индексы в таблице?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson