2014-09-29 114 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, ... 

或者,當然,真正的解決方案是爲人員添加一個表並向其添加關係。