SQL-запрос для сводки продаж - PullRequest
1 голос
/ 30 июня 2010

, пожалуйста, помогите мне с этим запросом.

select pName,Price, (Price*Quantity) as SalesValues from saleslog where 
BillDate='12-10-2010' and pGroup=15 group by pname, Quantity, Price;

Этот запрос предназначен для отображения сводки продаж по дате, но при этом отображается повторяющееся наименование продуктов.

Вывод вышеуказанного запроса

MAK 2 T OIL 5LTR.   635    3175
MAK 2 T OIL 5LTR.   635    6350
MAK ELITE 3LTR     422    6330
MAK ELITE 3LTR     422    8440
SYSTEM PURGE         305    6100
SYSTEM PURGE         305    15250

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

спасибо ...................

Ответы [ 3 ]

4 голосов
/ 30 июня 2010
SELECT pName, SUM(Price * Quantity) AS SalesValues
FROM   saleslog
WHERE  BillDate = '12-10-2010' 
       AND pGroup = 15
GROUP BY
       pname

Я удалил Price, поскольку он может (возможно) меняться и не ясно, какой выводить.

Если цена не меняется, используйте это:

SELECT pName, MIN(price), SUM(Price * Quantity) AS SalesValues
FROM   saleslog
WHERE  BillDate = '12-10-2010' 
       AND pGroup = 15
GROUP BY
       pname
2 голосов
/ 30 июня 2010

Попробуйте это:

select pName, price, SUM(Price*Quantity) as SalesValues 
from saleslog 
where BillDate='12-10-2010' and pGroup=15 
group by pname, price

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

Вам даже не нужно группировать по цене, если вы используете агрегат, отображайте его (например, MIN или MAX):

select pName, MAX(price), SUM(Price*Quantity) as SalesValues 
from saleslog 
where BillDate='12-10-2010' and pGroup=15 
group by pname

Вот некоторая документация по пункту GROUP BY:

Группирует выбранный набор строк в набор итоговых строк по значениям одного или нескольких столбцов или выражений. Одна строка возвращается для каждой группы. Агрегатные функции в списке предложений SELECT предоставляют информацию о каждой группе, а не об отдельных строках.

1 голос
/ 30 июня 2010

Вот ваш оригинальный запрос:

select pName,Price, (Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname, Quantity, Price;

Теперь вы говорите, что хотите, чтобы оно было сгруппировано только по pName. Итак, давайте сделаем это.

select pName,Price, (Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname;

Теперь, конечно, это даст ошибку. Таким образом, мы должны поместить агрегацию в другие столбцы. Имеет смысл суммировать столбец SalesValues.

select pName,Price, SUM(Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname;

Колонка Price все еще остается проблемой. Какой агрегатор имеет для этого смысл? Это просто зависит. Вы могли бы сделать MAX, MIN или AVERAGE, я думаю. Но на самом деле его нужно либо исключить, либо добавить обратно в группу. Если он добавлен обратно в группу, то у вас больше не будет отдельной строки для каждого pName. Если вы добавите агрегатор для Prince, то обязательно измените имя столбца, чтобы отразить его значение.

/* Leave out the Price completely. (My favorite option.) */
select pName,SUM(Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname;

/* Group by Price. You now have multiple rows per pName. */
select pName,Price, SUM(Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname, Price;

/* Average the Price. (OK, but could lead to confusion.) */
select pName,AVG(Price) as AveragePrice, SUM(Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname;

/* Max Price. (Almost useless). */
select pName,MAX(Price) as MaximumPrice, SUM(Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname;

/* Min Price. (Almost useless). */
select pName,MIN(Price) as MinimumPrice, SUM(Price*Quantity) as SalesValues from saleslog where  
BillDate='12-10-2010' and pGroup=15 group by pname;

Однако я не рекомендую агрегировать Price (особенно MAX и MIN), поскольку это может привести к путанице в будущем, когда люди попытаются использовать это значение.

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