Недопустимая COLUMN в списке выбора, поскольку она не содержится ни в статистической функции, ни в предложении GROUP BY - PullRequest
0 голосов
/ 19 июня 2019

У меня есть таблица с именем - tbl_emp_info в БД MYSQL и MSSQL (SQL-сервер) с той же схемой и данными.

Я выполняю следующий запрос для этих данных -

MYSQL Query

 select count(*), name from tbl_emp_info group by dept;

MSSQL Query

 select count(*), name from tbl_emp_info group by dept;

Когда я выполняю запрос MYSQL, он запускается и дает мне результат.Но когда я выполняю запрос MSSQL, он выдает эту ошибку

Ошибка SQL (8120): столбец NAME недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в GROUP.Предложение BY.

Теперь я понимаю ошибку и проверил ее ref - проверьте это: REF

Кроме того, в MYSQL - Это будетдать первое значение для NAME в выходных данных и игнорировать остальные значения для NAME, когда он выполняет «группирование по» по DEPT.

Мне нужно получить те же результаты и с MSSQL.Пожалуйста, просветите.

Ответы [ 7 ]

2 голосов
/ 19 июня 2019

MySQL имеет настраиваемое поведение , когда дело доходит до group by, поэтому по умолчанию он будет принимать запросы, которые не соответствуют стандарту SQL-92;MS SQL нет.

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

Если вы хотите группировать по отделам, ваш запрос должен быть:

select count(*), dept from tbl_emp_info group by dept;

Если вы хотите, чтобы отдел и (в алфавитном порядке) первый сотрудник,должно быть:

select count(*), min(name), dept from tbl_emp_info group by dept;
2 голосов
/ 19 июня 2019

столбец name также должен быть в группе по: выберите количество (*), имя из группы tbl_emp_info по dept, name;

Все неагрегированные и столбцы, которые вы пытаетесь показать, должны быть в группеот.

1 голос
/ 19 июня 2019

@ Ankush Rathi Вы можете получить только те столбцы, которые вы использовали в group by в select для MSSQL.

1 голос
/ 19 июня 2019

Я не совсем уверен, что вы хотите от вашего запроса, но я предполагаю, что вы хотите список имен в каждом отделе вместе с количеством этих имен в отделе. если так, то попробуйте это: используя COUNT OVER Функция окна

select  NumOfNames = count(name)OVER(partition by dept)
       ,name 
from tbl_emp_info 
;
1 голос
/ 19 июня 2019

Предложение «Группировать по» объединяет статистику на основе используемого поля.В MSSQL обязательно просматривать статистику рядом с каждым значением в поле группировки.Здесь "выберите dept, count (*) из группы tbl_emp_info по dept;"правильный запрос

1 голос
/ 19 июня 2019

попробуйте это: выберите имя, количество (1) из группы tbl_emp_info по имени;или выберите dept, count (1) из группы tbl_emp_info по dept;

1 голос
/ 19 июня 2019

Вам нужно выбрать столбец при выполнении агрегирования в sql. Вы должны быть как показано ниже

select count(*), name,dept from tbl_emp_info group by dept,name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...