Как правильно сделать запрос - MySQL

Узнай цену своей работы

Формулировка задачи:

Привет всем. Помогите с запросом, что-то не пойму как сделать. Есть таблица mytable с полями:
| driver_id                | INT(11)
| DATE                     | DATE
| driver_name              | VARCHAR(100)
| percent                  | INT(11)
| sum_recieved_from_client | DECIMAL(9,2)
| sum_tariff_for_driver    | DECIMAL(9,2)
| summa_for_payed          | DECIMAL(9,2)
| payed_status             | tinyint(1)
| percent_company          | INT(11)
В поле "payed_status" хранится статус оплаты. Нужно в запросе типа:
SELECT * FROM mytable WHERE DATE(`date`) BETWEEN '$start_date' AND '$end_date'";
получить все данные. Надо так, если "payed_status = 1", то вместо числа, которое в поле "summa_for_payed" всегда получать "0". Если в запросе добавлю "and payed_status not like '1'", то получится, что вывода этой строки вообще не будет получено, но надо получить всё, только с уже изменённым полем "summa_for_payed" в зависимости от состояния "payed_status"
Добавлю, так же надо, чтобы во время запроса с командой sum(summa_for_payed) за определённую дату, получать сумму, имея ввиду значение поля "payed_status", а точнее чтобы где "payed_status = 1", то и в сумме поля "summa_for_payed" считались как "0" если "payed_status = 1"

Решение задачи: «Как правильно сделать запрос»

textual
Листинг программы
SELECT SUM(IF(`payed_status`=1, 0, `summa_for_payed`)) FROM mytable

Объяснение кода листинга программы

В данном коде происходит следующее:

  1. payed_status - это название переменной, которая содержит значения, определяющие статус оплаты (например, 1 - оплачено, 0 - не оплачено).
  2. summa_for_payed - это название переменной, которая содержит сумму, которую необходимо оплатить.
  3. IF - это функция, которая возвращает одно значение, если условие верно, и другое значение, если условие ложно.
  4. SUM - это функция, которая суммирует все значения в выбранном столбце.
  5. IF(payed_status=1, 0,summa_for_payed)) - это выражение, которое возвращает 0, еслиpayed_statusравно 1 (оплачено), и возвращаетsumma_for_payed(сумму к оплате), еслиpayed_status` не равно 1.
  6. FROM mytable - это указание, из какой таблицы нужно выбрать данные. Таким образом, данный запрос выбирает сумму, которую необходимо оплатить, и возвращает ее. Если все значения в столбце payed_status равны 1, то возвращается 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5