Объеденить две таблицы по неделям

nikita

Новичок
Объединить две таблицы по неделям

Есть две таблицы:

summary:
stats_date date
page_views int(10)
visitors int(10)

orders:
orderid int(11)
total decimal(12,2)
date date

Как получить таблицу одним запросом, которая содержит статистику по неделям (то есть выввести сумму page_views, visitors, total и посчитать количество orderid) ?
 

.des.

Поставил пиво кому надо ;-)
Код:
SELECT
   WEEK(S.stats_date) w,
   SUM(S.page_views) page_views,
   SUM(S.visitors) visitors,
   COUNT(O.orderid) orderid,
   SUM(O.total) total
FROM summary S 
  LEFT JOIN orders O ON S.stats_date=O.date
GROUP BY w
 

nikita

Новичок
Я тоже вначале так сделал, но оказалось, что это не то что нужно:

Вот суммируем и группируем по неделям таблицу orders:
Запрос:
[SQL]SELECT
WEEK( O.date ) w,
COUNT( :confused:rderid ) orderid,
SUM( O.total ) total
FROM orders O
GROUP BY w[/SQL]

Результат:
w 51
orderid 7
total 3974.00

Это верные результаты.

Суммируем и группируем по неделям таблицу summary:
Запрос:
[SQL]SELECT
WEEK( S.stats_date ) w,
SUM( S.page_views ) page_views,
SUM( S.visitors ) visitors
FROM summary S
GROUP BY w[/SQL]

Результат:
w 51
page_views 7
visitors 7

Это тоже верные реультаты.

А вот когда их объединяем, то получаем не те результаты, которые ожидали:

Запрос:
[SQL]SELECT
WEEK( S.stats_date ) w,
SUM( S.page_views ) page_views,
SUM( S.visitors ) visitors,
COUNT( :confused:rderid ) orderid,
SUM( O.total ) total
FROM summary S
LEFT JOIN orders O
ON S.stats_date = O.date
GROUP BY w[/SQL]

Результат:
w 51
page_views 12
visitors 12
orderid 7
total 3974.00


Как можно заметить, 3-ий запрос работает не так, как хотелось бы, т.е. не так суммирует page_views и visitors (выдает не ту информацию, что второй запрос) :(
Как правильно объединить два первых запроса вместе, чтоб выводило правильные данные?
 

nikita

Новичок
Черт, так еще веселее:

[SQL]
SELECT WEEK( S.stats_date ) w, SUM( S.page_views ) page_views, SUM( S.visitors ) visitors, COUNT( :confused:rderid ) orderid, SUM( O.total ) total
FROM summary S
LEFT JOIN orders O
ON WEEK( S.stats_date ) = WEEK( O.date )
GROUP BY w
[/SQL]
Результат:
w 51
page_views 49
visitors 49
orderid 42
total 23844.00

Может это каким-то образом связано с функцией FROM_UNIXTIME ?
Просто на самом деле я тут писал немного проще запросы, чем они есть на самом деле. Например, в последнем запросе WEEK(O.date) на самом деле у меня написано как WEEK(FROM_UNIXTIME(O.date)), т.к. дата в таблице orders хранится в timestamp. Хотя по идее, ведь это непричем...
 
Сверху