2013-07-21 3 views
1

Я пытаюсь сделать систему бестселлеров, но у меня возникла проблема с оператором SQL. Вот мой SQL:SQL statement GROUP BY

select sp.name, pr.productName, op.productID, SUM(op.orderQuantity) AS totalQty from sm_orderedproduct op 
INNER JOIN sm_payment p ON op.orderID = p.orderID 
INNER JOIN sm_product pr ON op.productID = pr.productID 
INNER JOIN sm_sellerproduct sp ON sp.productID = pr.productID 
WHERE MONTH(str_to_date(dateOfPurchase, '%d/%m/%Y')) = 7 
GROUP BY sp.name, pr.productName, op.productID 
ORDER BY SUM(op.orderQuantity) DESC LIMIT 4; 

С помощью этого оператора SQL я получаю дубликат имени продавца. Например

Продавец Дин продала 97 TV

Продавец Rk продал 20 Desktop

Продавец Дин снова продала 15 жесткие диски

Продавец Габа продающегося 2 деревянных столов

Как вам может видеть, продавец Дин повторяется дважды из-за различных проданных продуктов. Я хочу сделать так:

Продавец Дин продал 112 продуктов

Продавец RK проданной 20 товаров

Продавец болтливости проданной 2 модели

И какие бы продавец продал? продукты

Я считаю, что что-то пошло не так с моей группой по статье. Заранее спасибо.

+0

ли это Postgres? –

+0

Извините? что вы подразумеваете под postgres –

+1

@Gwen - Postgres - это база данных. Гастон спрашивал, какой дБ вы используете. Похож на MySQL ... – sgeddes

ответ

4

Вы должны удалить продукт информацию, связанную с запросом/группе:

select sp.name, sum(op.orderQuantity) AS totalQty 
from sm_orderedproduct op 
    inner join sm_payment p ON op.orderID = p.orderID 
    inner join sm_product pr ON op.productID = pr.productID 
    inner join sm_sellerproduct sp ON sp.productID = pr.productID 
where MONTH(str_to_date(dateOfPurchase, '%d/%m/%Y')) = 7 
group by sp.name 
order by sum(op.orderQuantity) desc 
limit 4; 
+0

Wow that works Спасибо –

+0

@Gwen - np, рад, что я мог бы помочь! – sgeddes