MySQL группа с использованием двух столбцов - PullRequest
0 голосов
/ 12 декабря 2010

Мой запрос:

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 12 декабря 2010

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

2 голосов
/ 12 декабря 2010

Удалить группу 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
0 голосов
/ 24 октября 2012

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

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

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

0 голосов
/ 12 декабря 2010

изменить это

group by ts.ManufacturerID,AfterDiscount

на

group by ts.ManufacturerID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...