2014-09-29 2 views
0

У меня есть таблица с заказами, в которых в записи комментариев есть имя создателя заказа. Есть 3 продавца. Я хочу получать статистику от каждого продавца. Я пришел с нижестоящим запросом для вывода заказов одного человека, и он отлично работает, но я действительно боюсь, если это возможно в одном запросе выбора для извлечения заказов каждого продавца и вывода в той же таблице. Я пробовал Союз и выбираю внутри select, но я предполагаю, что неправильно создаю запрос. Нижеследующее прекрасно работает для вывода заказов Адама (количество проданных и общее значение продаж для этого человека). Спасибо за любые советы.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 "; 

Я знаю, что, возможно, группировка человеком была бы лучшей, если бы только имя человека было не просто строкой где-то внутри записи комментария.

ответ

1

вы можете сделать группу, на сазе на основе комментариев

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? Я должен иметь все значения для каждого человека отдельно, выводя в каждом цикле количество заказов каждого продавца, например, октябрь: Adam 136 | Петр: 213; Ноябрь: Адам 156 | Peter: 203 – Milosz

+0

@Milosz, он будет печатать, как Лицо, Месяц, год, Продажи, заказы как заголовки и Адам Октябрь 2014 года, 2,4 вроде этого – radar

+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

1

Если имя человека это просто строка, то, что вам нужно, чтобы сгруппировать их по выражению случая, который будет возвращать 1 для первый человек, 2 для второго и т. д .; что-то вроде:

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

Или, конечно, реальным решением было бы добавить таблицу для Лица и добавить к ней отношение.

Смежные вопросы