Есть запрос, в результате которого я получаю две строки(по каждому подзапросу).
select ifnull(null,'Russia'),from_sale from (
SELECT order_delivery_data.order_delivery_data_name,
round(sum(case `order`.order_status when 'paid' then 1 else 0 end) /
sum(case `order`.order_status when 'delivered' then 1 else 0 end)) as from_sale
FROM order_delivery_data
INNER JOIN `order` ON order_delivery_data.order_id = `order`.order_id
where order_delivery_data.order_delivery_data_name in ('BetaPost','Pony Express')
and order_createdAt >= CURRENT_DATE - INTERVAL (7 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
and order_createdAt <= CURRENT_DATE - INTERVAL (0 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
UNION
select order_delivery_code,
round(sum(case `order`.order_status when 'paid' then 1 else 0 end) /
sum(case `order`.order_status when 'delivered' then 1 else 0 end)) as from_sale
FROM order_delivery
INNER JOIN `order` ON order_delivery.order_id = `order`.order_id
and order_createdAt >= CURRENT_DATE - INTERVAL (7 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
and order_createdAt <= CURRENT_DATE - INTERVAL (0 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
AND order_delivery.order_delivery_code = 'courier'
)X
Как избавиться от двух подзапросов и прописать условия в одном запросе? Что-то типа:
FROM order_delivery_data,order_delivery
where order_delivery_data.order_delivery_data_name in ('BetaPost','Pony Express')
or order_delivery.order_delivery_code = 'courier'
Просто сложить результаты двух запросов нельзя, так как данные имеют разный вес
Вот как выглядит запрос в оригинале
select ifnull(null,'Россия'),sum(from_sale) as from_sale from (
SELECT order_delivery_data.order_delivery_data_name,
round((sum(case `order`.order_status when 'paid' then 1 else 0 end) +
sum(case `order`.order_status when 'delivered' then 1 else 0 end))/
(sum(case `order`.order_status when 'paid' then 1 else 0 end) +
sum(case `order`.order_status when 'later' then 1 else 0 end) +
sum(case `order`.order_status when 'delivery-approved' then 1 else 0 end) +
sum(case `order`.order_status when 'problem' then 1 else 0 end) +
sum(case `order`.order_status when 'refuse-to-send' then 1 else 0 end) +
sum(case `order`.order_status when 'refuse-to-receive' then 1 else 0 end) +
sum(case `order`.order_status when 'sent' then 1 else 0 end) +
sum(case `order`.order_status when 'send' then 1 else 0 end) +
sum(case `order`.order_status when 'parcel-returned' then 1 else 0 end) +
sum(case `order`.order_status when 'stop' then 1 else 0 end) +
sum(case `order`.order_status when 'parcel-on-a-place' then 1 else 0 end) +
sum(case `order`.order_status when 'delivered' then 1 else 0 end) +
sum(case `order`.order_status when 'injob' then 1 else 0 end) +
sum(case `order`.order_status when 'fake' then 1 else 0 end)) * 100,2) as from_sale
FROM order_delivery_data
INNER JOIN `order` ON order_delivery_data.order_id = `order`.order_id
where order_delivery_data.order_delivery_data_name in ('BetaPost','Pony Express Россия','Доставка Почтой России',
'КСЭ','Москва BetaPro','СДЭК','СПСР')
and order_createdAt >= CURRENT_DATE - INTERVAL (7 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
and order_createdAt <= CURRENT_DATE - INTERVAL (0 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
UNION
select`delivery-types`.`delivery-types_name`,
round((sum(case `order`.order_status when 'paid' then 1 else 0 end) +
sum(case `order`.order_status when 'delivered' then 1 else 0 end))/
(sum(case `order`.order_status when 'paid' then 1 else 0 end) +
sum(case `order`.order_status when 'later' then 1 else 0 end) +
sum(case `order`.order_status when 'delivery-approved' then 1 else 0 end) +
sum(case `order`.order_status when 'problem' then 1 else 0 end) +
sum(case `order`.order_status when 'refuse-to-send' then 1 else 0 end) +
sum(case `order`.order_status when 'refuse-to-receive' then 1 else 0 end) +
sum(case `order`.order_status when 'sent' then 1 else 0 end) +
sum(case `order`.order_status when 'send' then 1 else 0 end) +
sum(case `order`.order_status when 'parcel-returned' then 1 else 0 end) +
sum(case `order`.order_status when 'stop' then 1 else 0 end) +
sum(case `order`.order_status when 'parcel-on-a-place' then 1 else 0 end) +
sum(case `order`.order_status when 'delivered' then 1 else 0 end) +
sum(case `order`.order_status when 'injob' then 1 else 0 end) +
sum(case `order`.order_status when 'fake' then 1 else 0 end)) * 100,2) as from_sale
FROM `delivery-types`
INNER JOIN order_delivery ON `delivery-types`.`delivery-types_code` = order_delivery.order_delivery_code
INNER JOIN `order` ON order_delivery.order_id = `order`.order_id
where order_delivery.order_delivery_code is not null
and order_createdAt >= CURRENT_DATE - INTERVAL (7 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
and order_createdAt <= CURRENT_DATE - INTERVAL (0 + (5 + DAYOFWEEK(CURRENT_DATE)) % 7) DAY
AND order_delivery.order_delivery_code = 'courier'
)X
Но находить сумму двух значений некорректно sum(from_sale), т.к. не учитывается вес этих значений.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости