Что делает MySQL "GROUP BY NULL"? - PullRequest
       3

Что делает MySQL "GROUP BY NULL"?

4 голосов
/ 13 сентября 2011

У меня есть какой-то устаревший код, который я поддерживаю, и есть SQL-запрос, который я не понимаю. Я надеюсь, что кто-то здесь может объяснить мне цель этого. Запрос выглядит так:

select * from product_performance 
where merchantid = 2151277 and clickday >= '2011-09-01' 
group by null;

Когда я запускаю этот запрос без group by null в конце, я получаю 44 строки. Когда я запускаю его с group by null, я получаю 1 строку - первую строку в предыдущем наборе. Что здесь происходит, и какова цель использования этой группировки?

Ответы [ 2 ]

7 голосов
/ 13 сентября 2011

Он группирует весь запрос по постоянному значению, что позволяет эффективно выбирать строку для случайного возврата.Вы можете получить те же результаты, используя LIMIT 1.

. Обратите внимание, что эта идиома не является стандартным SQL и может вызвать ошибки, если вы попробуете ее в других базах данных.В MySQL вы можете отключить это поведение, указав режим ONLY FULL GROUP BY SQL.См. документацию для более подробной информации.

OTOH, LIMIT 1 также нестандартно, но более широко поддерживается, и тот же эффект может быть достигнут в базах данных, совместимых с SQL: 2008с предложением FETCH ... ONLY.Подробнее см. this .

0 голосов
/ 13 сентября 2011

хе-хе, давайте объясним в этом режиме: если у вас есть

select emp_id, dept_id
from employees
group by dept_id

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

если вы снимаете

select emp_id, dept_id
from employees
group by dept_id, emp_id

, вы получите данные, разделенные на depts и emps.

Но если вы group by null это означает, что вы ничего не разбиваете. У вас есть одна группа. И mysql выдаст вам emp_id и dept, не гарантированный из какой строки.

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