Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Не могу решить задачу для чайников  [new]
antongerva
Member

Откуда:
Сообщений: 2
Здравствуйте, уважаемые форумчане!

Прошу о помощи с задачей для чайников:

Составьте запрос, который будет получать сумму платежей для всех получателей, у которых в названии есть слово гипермаркет. При этом существует две таблицы. Первая называется expenses, у которой названия столбцов следующие - num, value, receiver. Вторая называется receivers, у которой названия столбцов следующие - num, name. В
первой таблице поле receiver имеет тип INT, значение которого соответствует полю num таблицы receivers.

Блоки для ввода решения (всего 22 блока):

(

FROM

)

SUM(receiver)

receiver

%гипермаркет%

SELECT

FROM

SUM(value)

WHERE

IN

num

WHERE

SELECT

expenses

receivers

name

LIKE

;

=

AVG(value)

DISTINCT


Заранее благодарю за ответ!

Также прилагается скриншот с задачей и блоками для ввода решения.

К сообщению приложен файл. Размер - 25Kb
3 янв 20, 12:47    [22053063]     Ответить | Цитировать Сообщить модератору
 Re: Не могу решить задачу для чайников  [new]
antongerva
Member

Откуда:
Сообщений: 2
Разобрался сам:

select sum(value) from expenses where receiver in (select num from receivers where name like '%гипермаркет%');

Также обращаю внимание на отсутствие одиночных ковычек в задании. В моём решении они есть.

Всем добра!
6 янв 20, 23:02    [22054268]     Ответить | Цитировать Сообщить модератору
 Re: Не могу решить задачу для чайников  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20026
Запрос-то рабочий - но один из самых неудачных с точки зрения производительности. Да и с расширяемостью у него не очень - логика практически тупиковая, финализованная, дополнять её непросто. Впрочем, если ограничиваться выданными блоками, то куда деваться...

В большинстве случаев старайтесь использовать связывание таблиц с последующим отбором. Т.е. правильным с точки зрения производительности будет запрос
SELECT SUM(value) 
FROM expenses 
JOIN receivers 
    ON expenses.receiver = receivers.num
WHERE receivers.name LIKE '%гипермаркет%';
6 янв 20, 23:13    [22054275]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить