2010-12-12 4 views
0

Мой запрос:MySQL группы с помощью двух столбцов

SELECT 
tm.ManufacturerName,sum(tb.Quantity) AS qty, 
tb.AfterDiscount AS AfterDiscount 

FROM tblbasket AS tb 

INNER JOIN tblstock AS ts 
ON ts.ProductCode = tb.ProductCode 
AND tb.Status=3 

LEFT JOIN tblmanufacturer AS tm 
ON tm.ManufacturerID=ts.ManufacturerID 

GROUP BY ts.ManufacturerID,AfterDiscount 
ORDER BY qty desc 

Выходы это:

ManufacturerName qty AfterDiscount 
MOSER BAER HOME VIDEO 48 57.6 
MOSER BAER HOME VIDEO 39 28.8 
MOSER BAER HOME VIDEO 28 115.2 
MOSER BAER HOME VIDEO 27 259.2 
MOSER BAER HOME VIDEO 26 374.4 
SAREGAMA INDIA LIMITED 25 135 
SYMPHONY HOME VIDEO 22 36 
MOSER BAER HOME VIDEO 20 144 
SAREGAMA INDIA LIMITED 19 1282.5 
SAREGAMA INDIA LIMITED 18 67.5 
MOSER BAER HOME VIDEO 18 172.8 
MOSER BAER HOME VIDEO 16 460.8 
SYMPHONY HOME VIDEO 16 45 
RAJ VIDEO VISION 16 71.1 
MOSER BAER HOME VIDEO 15 86.4 
SAREGAMA INDIA LIMITED 15 202.5 
MASTER ACCESSORIES 13 90 
MOSER BAER HOME VIDEO 13 89.1 
MELODY RECORDING 13 31.5 
MOSER BAER HOME VIDEO 13 27 

То, что я хочу это:

ManufacturerName qty AfterDiscount 
MOSER BAER HOME VIDEO 190 1568 
SAREGAMA INDIA LIMITED 77 1686 
SYMPHONY HOME VIDEO 38 81 
RAJ VIDEO VISION 16 71.1 
MASTER ACCESSORIES 13 90 
MELODY RECORDING 13 31.5 

Мой запрос не показывать правильные результаты , Что я должен изменить в своем запросе?

Я думаю, я должен суммировать количество и цену, а также группу по количеству и цене, а также порядок по количеству.

Любые идеи или предложения?

ответ

2

Удалить группу AfterDiscount. Это дает вам уникальную строку для всех комбинаций ManufacturerId, AfterDiscount, которые отражают ваш результат.

Вам нужно только выполнить команду GROUP BY ManufacturerID и SELECT SUM (AfterDiscount), чтобы свернуть этот столбец и любой другой столбец, который необходимо агрегировать.

SELECT tm.ManufacturerName,sum(tb.Quantity) as qty,SUM(tb.AfterDiscount) as AfterDiscount from tblbasket as tb inner join tblstock as ts on ts.ProductCode = tb.ProductCode and tb.Status=3 left join tblmanufacturer as tm on tm.ManufacturerID=ts.ManufacturerID 
group by ts.ManufacturerID 
order by qty desc 
2

Вы не получите группу, что вы хотите, если есть поля в запросе, не «группа», в частности вы должны группировать по имени производителя ,, и это будет только группа для каждых уников происходят. .. затем добавить суммы/группа покупает для каждого другого поля .. каждое поле должно иметь либо группу или суммы на нем

0

изменения этого

group by ts.ManufacturerID,AfterDiscount 

в

group by ts.ManufacturerID 
0

Здесь вы можете принять несколько иной подход, который будет группироваться по обоим столбцам. Я столкнулся с этим, когда пытался использовать оператор сравнения по вычисленному значению в левом соединении, и это не сработало, поэтому придумал объединение двух столбцов и группировку по результирующему значению.

SELECT 
tm.ManufacturerName,sum(tb.Quantity) AS qty, 
tb.AfterDiscount AS AfterDiscount, 
concat_ws(':', tm.ManufacturerID, tb.AfterDiscount) as ConcatManufAfterDisc 

FROM tblbasket AS tb 

INNER JOIN tblstock AS ts 
ON ts.ProductCode = tb.ProductCode 
AND tb.Status=3 

LEFT JOIN tblmanufacturer AS tm 
ON tm.ManufacturerID=ts.ManufacturerID 

GROUP BY ConcatManufAfterDisc 
ORDER BY qty desc 

Это может показаться не идеальным решением, но группировка должна работать, и это полезное решение.

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