2013-04-04 2 views
0

У меня есть таблица (продажи), которая имеет четыре столбца;MySQL COUNT где и COUNT все

id, user_id, product_id, and date_added. 

Мне нужно подсчитать количество продуктов с определенным идентификатором, которые были проданы пользователем, а также получить общее количество продуктов, продаваемых этим пользователем в текущем месяце.

Я не могу суммировать общую сумму продуктов. У меня есть;

SELECT user_id, product_id, count(user_id) 
FROM sales 
WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
GROUP BY user_id, product_id; 

как я суммировать общий объем продаж для пользователя, так что я могу получить процент от общего объема продаж, которые являются специфическим product_id?

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

|----------|----------|----------|----------| 
|user_id |product_id|sales  |total  | 
|----------|----------|----------|----------| 
|1   |4   |6   |82  | 
|2   |4   |3   |121  | 
|3   |4   |8   |93  |  
|----------|----------|----------|----------| 

где total - общее количество продаж, сделанных пользователем.

(Is Следует отметить, что мне не нужно MySQL, чтобы вычислить процент - только, чтобы получить сумму всех продаж продукции)

благодаря

+1

Могут вы предоставляете образец предполагаемого вывода, потому что я не чувствую, какие данные вы хотите, так как вывод вписывается в одну выходную таблицу с 'GROUP BY', используемой на' user_id, product_id' – harsh

+0

Привет @harsh, спасибо за вопрос, я обновил свой вопрос с желаемой выходной таблицей. –

+0

, если существует несколько 'product_id' для одного' user_id', тогда вы хотите, чтобы 'total' повторялось? Я не думаю, что это хорошая идея! – harsh

ответ

1

Вы должны будете использовать подзапрос, так как вы полагаетесь на агрегатных функциях, чтобы сделать счетчиковые

SELECT user_id, @pid:= product_id as product_id, count(user_id), 
     (SELECT count(*) 
      FROM sales 
      WHERE MONTH(date_added) = MONTH(now()) 
       AND product_id = @pid 
      group by user_id 
     ) as total_product_sales 
FROM sales 
WHERE MONTH(date_added) = MONTH(now()) 
GROUP BY user_id, product_id; 
+0

Я исправлю этот ответ, потому что, как я понимаю, нам нужно вычислить количество продуктов, но не пользователей: –

+0

'SELECT user_id, product_id, count (product_id) as prod_count, ( \t SELECT count (product_id) \t ОТ продаж \t ГДЕ МЕСЯЦ (DATE_ADDED) = МЕСЯЦ (теперь()) и идентификатор_пользователь = t1.user_id \t GROUP BY идентификатор_пользователь ) в качестве total_prods от продаж t1 ГДЕ МЕСЯЦ (DATE_ADDED) = МЕСЯЦ (теперь()) GROUP BY user_id, product_id' –

0

На самом деле я не очень понимаю, что и хотите. ..

Этот запрос будет дать и в «подытоги» для данного пользователя

SELECT product_id, count(user_id) 
FROM sales 
WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
    AND user_id='YOUR_USER_ID' 
GROUP BY product_id with rollup; 

ИЛИ если вы хочу общий процент данного продукта идентификатор и идентификатор пользователя за текущий месяц:

SELECT 
     PARTIAL_SALES/TOTAL_SALES*100 
FROM 
     (SELECT USER_ID, 
       count(user_id) AS PARTIAL_SALES 
     FROM sales 
       WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
       AND user_id='YOUR_USER_ID' 
       AND PRODUCT_ID='YOUR_PRODUCT_ID' 
      GROUP BY USER_ID) AS PARTIAL, 
     (SELECT USER_ID, 
       count(user_id) as TOTAL_SALES 
     FROM sales 
       WHERE MONTH(date_added) = MONTH(CURRENT_DATE) 
      GROUP BY USER_id) AS TOTAL1 
WHERE PARTIAL.USER_ID=TOTAL.USER_ID; 
+0

HI Davide, и спасибо за ваш ответ. Мне не нужен процент, который будет рассчитываться в вызове sql, я могу сделать это позже с необработанными цифрами. –

+0

Тогда просто используйте первый запрос, сводный. Он должен давать промежуточные итоги для каждого идентификатора продукта. И последняя строка будет общей общей. – Davide

+0

Я хочу построить диаграмму столбцов с результатами, показывающими продажи каждого типа продукта для каждого продавца.Я не могу добавить user_id или PRODUCT_ID вручную, они должны быть частью SELECT, user_id запроса –