У меня есть следующая схема: http://sqlfiddle.com/#!9/bd3a4/1 Я хотел бы группу по дате() и добавить где user_id = .. в день и рассчитывать на результатах в день?. требуется День результат | TotalRequests | TotalOrdersкак MySQL группы по дате кратному остался присоединиться к
ответ
Так как вы могли бы иметь заказ на 1-й день, и запрос на 8-й день, вы можете иметь записи на одной стороне но не другой. Чтобы квалифицировать ваши потребности, я бы сделал UNION всех заказов и запросов по дате. Затем сверните эти значения. Внутренний запрос на предварительный агрегат - это предложение WHERE для каждого пользователя. В предагрегатном запросе также есть столбец recSource, чтобы указать, откуда запись была получена из «O» из заказов и «R» из запросов, поэтому свертка знает, какой столбец будет хранить общий счет соответственно.
select
preAgg.recDate,
SUM(case when preAgg.recSource = 'O' then preAgg.recCount else 0 end) as OrderCount,
SUM(case when preAgg.recSource = 'R' then preAgg.recCount else 0 end) as RequestCount
from
(select
date(o.created_at) recDate,
'O' as recSource,
count(*) as recCount
from
orders o
where
o.user_id = 3
group by
date(o.created_at)
UNION ALL
select
date(r.created_at) recDate,
'R' as recSource,
count(*) as recCount
from
requests r
where
r.user_id = 3
group by
date(r.created_at)) preAgg
group by
preAgg.recDate
order by
preAgg.recDate
Для оптимизации запросов, я бы обеспечить ваш заказ и запрос таблицы и имеют имеют индекс (user_id, created_at).
Это замечательно, не знаю эту технику, как бы добавить, скажем, commissions_table и SUM (commissions.amount) за день(), в этом случае мы не сможем использовать UNION. – dflow
@dflow, тот же процесс, просто добавьте ДОПОЛНИТЕЛЬНЫЙ ... «UNION ALL», но с тем же столбцом/суммой/группой. Установите recSource как «C» для Комиссии (как пример). и измените с COUNT (*) на SUM (комиссионный счет) как recCount, чтобы он соответствовал значениям ожидания внешнего запроса. И затем добавьте окончательный SUM (case/when) для комиссии recSource value = «C» – DRapp
отличный, еще одна вещь. Комиссия имеет десятичный тип, поэтому все результаты возвращаются в десятичном формате, поэтому он составляет 84,00 и т. Д. как я могу установить формат столбца результата? – dflow
Вы можете использовать следующий запрос:
SELECT
DATE(o.created_at) AS Day
,COUNT(r.id) AS TotalRequests
,COUNT(o.id) AS TotalOrders
FROM orders o
LEFT JOIN
requests r ON
r.id = o.request_id
WHERE o.user_id = 3
GROUP BY DATE(r.created_at), DATE(o.created_at),o.user_id
Спасибо за скрипку. Но также добавьте всю необходимую информацию в вопрос. Разрыв ссылок, особенно SQLFiddle. И мы хотим, чтобы сообщения были полезны будущим посетителям. –