Запрос MSSQL должен возвращать то же, что и MYSQL

У меня есть запрос MYSQL и он работает нормально. ЗАПРОС:

select tst_type, count(tst_type) tot from tst_type where project='JupiQA';

Приведенный выше запрос возвращает одну запись. Если я добавляю GROUP BY tst_type в этот запрос, он возвращает несколько значений.

Запрос, который я пробовал в MSSQL без GROUP BY tst_type, показывает ошибку

ОШИБКА: столбец 'tst_type.tst_type' недействителен в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

После этого добавил GROUP BY tst_type в запрос MSSQL, затем работает нормально и возвращает несколько значений.

Но мое требование состоит в том, что он должен возвращать то же, что и MYSQL, без добавления GROUP BY fn ИЛИ должен возвращать одно значение, например MYSQL.


person user3114967    schedule 03.02.2015    source источник
comment
Что представляет собой эта единственная запись в вашем первом запросе? Общее количество этих конкретных tst_type записей или количество всех записей?   -  person alroc    schedule 03.02.2015
comment
Он возвращает общее количество всех записей.   -  person user3114967    schedule 03.02.2015


Ответы (2)


MySQL допускает такое поведение, но я не знаю какой-либо другой СУБД, в которой это возможно. Если вы хотите, чтобы запросы MySQL и MSSQL вели себя одинаково, добавьте режим SQL ONLY_FULL_GROUP_BY. Теперь MySQL будет корректно выдавать ошибку.

Также ознакомьтесь с этим сообщением SO: Почему MySQL разрешает группу по запросам БЕЗ агрегатных функций?

person Nicholai    schedule 03.02.2015

При выполнении COUNT(), как вы делаете здесь, GROUP BY требуется для получения правильных результатов. См. документацию MySQL по этой функции.

Вы можете использовать count(*) без каких-либо других полей, чтобы подсчитать общее количество записей. В противном случае вы должны использовать GROUP BY.

ИМХО, ваше требование к этому запросу задом наперед; агрегатные функции требуют, чтобы GROUP BY вел себя правильно/непротиворечиво, когда неагрегированные поля включены в select. MSSQL ведет себя правильно, MySQL — нет.

person alroc    schedule 03.02.2015