2014-09-29 43 views
0

我有一个表的订单,其中在评论记录中有一个订单创建者的名字。 有3个销售人员。我想从每个销售人员处获取统计信息。 我想出了以下查询输出一个人的订单,它工作正常,但我真的很难,如果它可能在一个选择查询获取每个销售人员的订单和输出在同一个表中。我试过联盟并选择内选择,但我想我构建查询错误。下面的工作正常输出亚当的订单(销售数量和该人的总销售额)。感谢您的任何提示。MySql复杂的查询来计算每个人的订单

SELECT MONTHNAME(orders.despatched) as Month, YEAR(orders.despatched) as Year, 
SUM(orders.price) as AdamSales, COUNT(orders.comment) as AdamQt FROM orders 
WHERE 
orders.comment LIKE '%Adam%' AND 
orders.status = 'despatched' AND 
orders.despatched BETWEEN '$d1' AND '$d2' 
GROUP BY YEAR(orders.despatched), MONTH(orders.despatched) 
order by orders.despatched "; 

我知道,如果只有人的名字不仅仅是评论记录中某个字符串的某个字符串,那么按Person分组的人可能是最好的。

回答

1

您可以在case语句根据该意见

SELECT 
     (case when ORDERs.comments LIKE '%Adam%' THEN 'Adam' 
       when ORDERS.comments LIKE '%Peter%' THEN 'Peter' END) as 'Person' 
     MONTHNAME(orders.despatched) as Month, 
     YEAR(orders.despatched) as Year, 
     SUM(orders.price) as Sales, 
     COUNT(orders.comment) as Qt FROM orders 
WHERE 
(orders.comment LIKE '%Adam%' OR orders.comment LIKE '%Peter%') AND 
orders.status = 'despatched' AND 
orders.despatched BETWEEN '$d1' AND '$d2' 
GROUP BY YEAR(orders.despatched), MONTH(orders.despatched), 
    (case when ORDERs.comments LIKE '%Adam%' THEN 'Adam' 
       when ORDERS.comments LIKE '%Peter%' THEN 'Peter' END) 
order by orders.despatched 
+0

对不起,我不明白。那么括号里的第一个例子是什么呢?将结果名称值保存到Person?我必须将每个人的所有价值分开,在每个回路中输出每个销售人员订单的数量,例如10月:Adam 136 |彼得:213;十一月:亚当156 | Peter:203 – Milosz 2014-09-30 20:23:41

+0

@Milosz,它会打印出像人,月,年,销售,订单作为标题和亚当2014年10月,2,4这样的 – radar 2014-09-30 20:27:47

+0

保持得到:mysql_fetch_array():提供的参数不是有效的MySQL结果资源。我将查询保存到$ sql,然后:$ result = mysql_query($ sql,$ con);然后循环:while($ record = mysql_fetch_array($ result)){ echo''; echo'​​'。 $ record ['Month']。 ''; echo'​​'。 $ record ['Year']。 ''; echo'​​'。 $ record ['Person']。 ''; – Milosz 2014-09-30 20:52:22

1

通过做组如果这个人的名字只是一个字符串,那么你需要的是集团通过对案例的表达,将为返回1第一人,第二人等2;例如:

Group by Case When orders.comment LIKE '%Adam%' then 1 When ... End, ... 

或者,当然,真正的解决方案是为人员添加一个表并向其添加关系。