Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 9
1

Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY

06.11.2016, 19:26. Показов 2559. Ответов 8
Метки нет (Все метки)

Есть запрос с подзапросом, в котором 4 столбца - цена, имя продукта, год и месяц продажи. В подзапросе мы получаем общее кол-во продаж всех товаров за каждый месяц каждого года(SUM(Quantity)). В самом запросе - максимальное кол-во продаж одного товара в каждом месяце каждого года(MAX(x.Quantity)). Есть проблема с выводом столбца с именем - при вводе "NAME" в SELECT основного запроса, SQL выдаёт ошибку - "Столбец "x.NAME" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY." Если ввести "NAME" в GROUP BY, запрос выдаёт тоже самое, что и подзапрос.
Помогите пожалуйста хотя бы советом новичку, не знаю как исправить данную ошибку. В приложенных файлах скриншот с выводом запроса и подзапроса, структура БД и сама БД в архиве.
0
Миниатюры
Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY   Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY  
Вложения
Тип файла: rar Архив WinRAR.rar (764.4 Кб, 1 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2016, 19:26
Ответы с готовыми решениями:

Столбец недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Доброго времени суток! Помогите плиз с запросом, недавно работаю с SQL, помощь просто необходима....

Столбец недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY
Добрый день. isnull((select isnull(sum(com.com_qty),0) com_qty from kmd_com where...

Попытка выполнить запрос, который не включает указ выражение как часть статистической функции
Привет! хочу обратиться за помощью, у самой опыта работы с SQL запросами особо нет. Прописываю...

График статистической функции распределения
Мне нужно построить в статистическую функцию распределения. Есть 100 значений(вариационный ряд),...

8
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 9
06.11.2016, 19:47  [ТС] 2
Сам код:

SQL
1
2
3
4
5
6
7
8
USE Northwind
 
SELECT MAX(x.Quantity) AS Quantity, [YEAR], [MONTH] FROM 
(SELECT SUM(Quantity) AS Quantity, YEAR(OrderDate) AS [YEAR], MONTH(OrderDate) AS [MONTH], Products.ProductName AS NAME FROM Products
JOIN [ORDER Details] ON Products.ProductID = [ORDER Details].ProductID
JOIN Orders ON [ORDER Details].OrderID = Orders.OrderID 
GROUP BY YEAR(OrderDate), MONTH(OrderDate), Products.ProductName)x
GROUP BY [YEAR], [MONTH]ORDER BY [YEAR], [MONTH]
0
шапоклякистка 8-го дня
3657 / 2218 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
06.11.2016, 21:31 3
Цитата Сообщение от helloworld1 Посмотреть сообщение
при вводе "NAME" в SELECT основного запроса, SQL выдаёт ошибку - "Столбец "x.NAME" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY."
Так допишите его в GroupBy, в чем поблема-то?

SQL
1
2
3
4
5
6
7
8
9
10
11
12
WITH x AS (
SELECT SUM(Quantity) AS Quantity, YEAR(OrderDate) AS [YEAR], MONTH(OrderDate) AS [MONTH], 
  Products.ProductName AS NAME 
FROM Products
  JOIN [ORDER Details] ON Products.ProductID = [ORDER Details].ProductID
  JOIN Orders ON [ORDER Details].OrderID = Orders.OrderID 
GROUP BY YEAR(OrderDate), MONTH(OrderDate), Products.ProductName)
 
SELECT MAX(x.Quantity) AS Quantity, [YEAR], [MONTH], Name
FROM x
GROUP BY [YEAR], [MONTH], Name
ORDER BY [YEAR], [MONTH]
0
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 9
06.11.2016, 21:44  [ТС] 4
Я же сразу сказал, что дописывал в GROUP BY. Тогда запрос выдает не то, что нужно. Условие - вывести самый продаваемый товар в каждом месяце каждого года. Если же добавить в GROUP BY "name" тогда выводится вот что(1й скрин):
А должен выводить то, что на втором, но только с еще одним столбцом Name, где написанно будет что это за товар с продажей, например, 105( за 7й месяц 96го года).
0
Миниатюры
Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY   Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY  
3131 / 1890 / 665
Регистрация: 02.06.2013
Сообщений: 4,647
06.11.2016, 22:02 5
Цитата Сообщение от helloworld1 Посмотреть сообщение
А должен выводить то, что на втором, но только с еще одним столбцом Name
И какое же имя из всех перечисленный нужно выводить?
0
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 9
06.11.2016, 22:24  [ТС] 6
Products.ProductName.
Я же говорю, мой запрос выводит таблицу с максимальными продажами в каждом месяце каждого года. А должен еще вывести НАИМЕНОВАНИЕ этого продукта.
В БД в таблице Products в столбце Quantity содержатся все продажи товара. С помощью SUM(Quantity) и группировке GROUP BY по году и месяцу я нахожу кол-во продаж ВСЕХ ТОВАРОВ ВО ВСЕХ МЕСЯЦАХ ВСЕХ ГОДОВ. Дальше в основном запросе с помощью MAX(x.Quantity) я нахожу В КАЖДОМ МЕСЯЦЕ КАЖДОГО ГОДА ТОВАР, КОТОРЫЙ ПРОДАЛИ НАИБОЛЬШЕЕ КОЛ-ВО РАЗ. Но в SELECTе прописано только само число, сколько продали, а не имя этого товара. Если я добавляю имя товара, тогда SQL выдает ошибку выше, о которой я написал. Если добавить в GROUP BY, тогда запрос выдаёт ВСЕ продажи за все месяцы всех годов, а мне надо только САМЫЙ ПРОДАВАЕМЫЙ ТОВАР В КАЖДОМ МЕСЯЦЕ КАЖДОГО ГОДА. Надеюсь я всё правильно и понятно расписал, извините, но в SQL я совсем мало понимаю. Спава обведено то, что будет выводится, если написать Name в GROUP BY. Слева то, что надо получить, но только с четвертым столбцом, в котором будет наименование продукта(оно может быть разным, записанно оно в ProductName)
0
Миниатюры
Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY  
3131 / 1890 / 665
Регистрация: 02.06.2013
Сообщений: 4,647
06.11.2016, 22:42 7
Сервер 2000-й?
0
0 / 0 / 0
Регистрация: 15.03.2015
Сообщений: 9
06.11.2016, 23:18  [ТС] 8
2008
0
шапоклякистка 8-го дня
3657 / 2218 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.11.2016, 09:29 9
Цитата Сообщение от helloworld1 Посмотреть сообщение
Дальше в основном запросе с помощью MAX(x.Quantity) я нахожу В КАЖДОМ МЕСЯЦЕ КАЖДОГО ГОДА ТОВАР, КОТОРЫЙ ПРОДАЛИ НАИБОЛЬШЕЕ КОЛ-ВО РАЗ.
1) Вы ошибаетесь. С помощью вашего запроса вы выбираете наибольшее поданное в каждом месяце количество товара, а вовсе не число раз его продажи.

2) Какой вопрос вы ставите, на такой вам и отвечают. Написали бы "я не знаю, как составить запрос, который бы выбрал (и описание назнаения запроса)" - вам бы помогли с запосом.
А вы спросили о сообщении об ошибке - и получили ответ как обойти ошибку.

Добавлено через 24 минуты
Если выбрать нужно все-таки товар, проданный в максимальном количестве, то

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WITH x AS (
SELECT SUM(Quantity) AS qq, YEAR(OrderDate) AS yy, MONTH(OrderDate) AS mm, Details.ProductID
FROM [ORDER Details] AS Details
  JOIN Orders ON Details.OrderID = Orders.OrderID 
GROUP BY YEAR(OrderDate), MONTH(OrderDate), Details.ProductID),
 
y AS ( 
SELECT MAX(x.Quantity) AS mq, yy, mm
FROM x
GROUP BY yy, mm)
 
SELECT y.yy, y.mm, y.mq, Products.ProductName
FROM y
  JOIN x ON x.qq = y.mq AND x.yy = y.YY AND x.MM = y.mm
  JOIN Products ON Products.ProductID = x.ProductID
ORDER BY y.mm, y.mq, Products.ProductName
Добавлено через 4 минуты
А если наибольшее число раз - то в самом начале меняем:
SQL
1
2
WITH x AS (
SELECT COUNT(Orders.OrderID) AS qq,
(далее без изменений)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2016, 09:29

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как сделать вывод аносов статей на статистической странице?
Здравствуйте! Хотел бы вывести анонсы статей на главную статистическую страницу. Это возможно? Если...

Определить, содержится ли данное слово в предложении
#include <iostream> #include <cstring> //С клавиатуры вводится строка символов, представляющая...

Определить, сколько гласных букв содержится в предложении
Считает но не верно, не могу найти ошибку program lab42; {$APPTYPE CONSOLE} uses SysUtils;...

Определить, содержится ли в предложении введенное с клавиатуры слово
Определить, содержится ли в предложении введенное с клавиатуры слово.

Определить, содержится ли в заданном предложении введенное слово
Определить, содержится ли в заданном предложении введенное слово. Написать программу на Pascal

Правильное применение статистической функции =КОРРЕЛ() в Excel
Друзья всем привет! Подскажите пожалуйста, правильно ли рассуждаю. Насколько я понял, функция...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.