#sql #postgresql
#sql #postgresql
Вопрос:
При использовании приведенного ниже запроса я получаю 7 записей из базы данных.
SELECT pickup_date::date,
SUM(CASE WHEN paid ='Yes' THEN price ELSE 0 END) AS TotalMoMoPaid
from requests
where order_status = 'Done'
and payment_mode = 'MoMo'
and pickup_date::date >= current_timestamp::date - INTERVAL '7 days'
GROUP BY pickup_date::date,paid,order_status,price
Когда один и тот же запрос используется в качестве подзапроса, я получаю 2 записи, которые не соответствуют моим ожиданиям,
SELECT pickup_date::date,
sub.TotalMoMoPaid,
SUM(CASE WHEN order_status ='Done' THEN price ELSE 0 END) AS "TotalCashSales"
from (
SELECT paid as subPaid,
order_status as subStatus,
price as subPrice,
SUM(CASE WHEN paid ='Yes' THEN price ELSE 0 END) AS TotalMoMoPaid
from requests
where order_status = 'Done'
and payment_mode = 'MoMo'
and pickup_date::date >= current_timestamp::date - INTERVAL '7 days'
GROUP BY pickup_date::date,subPaid,subStatus,subPrice
) AS sub, requests
where order_status ='Done'
and payment_mode = 'Cash'
and pickup_date::date >= current_timestamp::date - INTERVAL '7 days'
GROUP BY sub.TotalMoMoPaid,subPaid,pickup_date::date
ORDER BY sub.TotalMoMoPaid,pickup_date::date
Комментарии:
1. Никогда не используйте запятые в
FROM
предложении. Всегда используйте правильный, явный, стандартный , читаемыйJOIN
синтаксис. В конце концов, чего бы вы ожидали от декартова произведения, кроме умножения количества строк?
Ответ №1:
Этот запрос должен работать вместо использования подзапросов;
SELECT pickup_date::date,
SUM(CASE WHEN payment_mode = 'MoMo' and paid = 'Yes' THEN price ELSE 0 END) AS TotalMoMoPaid,
SUM(CASE WHEN payment_mode = 'Cash' and paid = 'Yes' THEN price ELSE 0 END) AS TotalCashSales
FROM requests
WHERE order_status = 'Done'
and pickup_date::date >= current_timestamp::date - INTERVAL '7 days'
GROUP BY pickup_date::date,paid,order_status,price
Комментарии:
1. Хорошо, конечно, но запрос теперь выводит данные с одинаковыми датами в разных строках, он должен суммироваться для одних и тех же дат. проверьте ссылку ниже ibb.co/qgJsMg5
2. Я думаю, что режим оплаты в group by вызывает это, поэтому я отредактировал запрос. Можете ли вы попробовать новую версию?
3. Спасибо за вашу помощь, это исправлено после того, как я удалил оплаченную, order_status, цену из ГРУППЫ ПО