2014-04-30 105 views
0

我试图计算日期范围内的订单数量,按日期分组,但也计算在同一日期发生的其他一些记录。MySQL GROUP BY with subquery(ies)

我有一个查询看起来是这样的:

SELECT 
order_date, 
DATE_FORMAT(order_date,'%W') AS day, 
DATE_FORMAT(order_date,'%d-%m-%Y') AS orderdate, 
COUNT(orderID) As orders, 
a.something AS something 
b.something AS something_else, 
a.something + b.something AS total_somethings 
FROM orders, 
(SELECT COUNT(*) AS something FROM other_table) AS a, 
(SELECT COUNT(*) AS something FROM another_table) AS b, 
GROUP BY order_date 
HAVING order_date >= '2014-01-01' AND order_date <= '2014-01-31' 
ORDER BY order_date ASC 

它的工作原理确定,但很明显,子查询计算每一行。表'other_table'和'another_table'都有日期字段,我想用它来限制每行的结果。

我试图改变子查询是这样的:

(SELECT COUNT(*) AS something FROM other_table WHERE date_field = order_date) AS a, 

,但它仍然是计算每一行。

任何意见赞赏。

感谢

+0

如果你自己运行子查询,你会得到预期的计数吗? SELECT COUNT(*)AS FROM other_table WHERE date_field = order_date; –

+0

如果我自己指定日期,例如WHERE date_field ='2014-01-01',那么是的,我会得到该日期的正确计数。 – Dan

+1

我明白你想要做什么。 order_date列是指订单表。但是,您不能在“内联视图”中访问此列。除非other_table中有另一个order_date列,否则应该会出现错误。 –

回答

1

在下面的查询,我在other_tableanother_table表分组的date_field。然后,我使用date_fieldorders表加入。以下查询是否适合您?

SELECT 
order_date, 
DATE_FORMAT(order_date,'%W') AS day, 
DATE_FORMAT(order_date,'%d-%m-%Y') AS orderdate, 
COUNT(orderID) As orders, 
a.something AS something 
b.something AS something_else, 
a.something + b.something AS total_somethings 
FROM orders, 
(SELECT date_field, COUNT(*) AS something FROM other_table GROUP BY date_field) AS a, 
(SELECT date_field, COUNT(*) AS something FROM another_table GROUP BY date_field) AS b 
WHERE order_date >= '2014-01-01' AND order_date <= '2014-01-31' 
AND order_date = a.date_field AND order_date = b.date_field 
GROUP BY order_date 
ORDER BY order_date ASC; 
+0

我认为这样做了,我得仔细检查一下,但这一切对我来说都是正确的。谢谢你的帮助。 – Dan

+0

不客气!乐意效劳 :-) –