Поиск

GROUP BY со скрытыми полями

MySQL расширяет применение GROUP BY таким образом, что вы можете использовать столбцы или вычисления в списке SELECT, которые не появляются в конструкции GROUP BY. То есть предполагается применение любого возможного значения для данной группы. Вы можете использовать это для получения более высокой производительности за счет отсутствия необходимости в сортировке и группировании по ненужным позициям. На­пример, вам не потребуется группировать по customer.name в следующем запросе:
mysql> SELECT order.custid, customer.name, MAX(payments)-> FROM order,customer-> WHERE order.custid = customer.custid-> GROUP BY order.custid;
В стандартном SQL вы должны добавить customer.name в конструкцию GROUP BY. В MySQL это излишне, если только вы не работаете в режиме ANSI.
Не используйте это средство, если значения столбцов, пропущенных в GROUP BY, не являются уникальными в пределах группы. В таком случае могут быть получены не­предсказуемые результаты.
В некоторых случаях можно использовать MIN() и МАХ() для получения специфиче­ских значений столбцов, если они не уникальны. Приведенное ниже выражение выдает значение column из строки, содержащей наименьшее значение столбцы sort:
SUBSTR(MIN (CONCAT(RPAD(sort,6,' '),column)),7)
Следует отметить, что если вы используете MySQL версии 3.22 или предшествую­щей, либо если вы пытаетесь следовать стандарту SQL, то нельзя использовать выраже­ния в предложениях ORDER BY и GROUP BY. Эти ограничения можно обойти с помощью псевдонимов выражений:
mysql> SELECTid,FLOOR(value/100)ASvalFROM имя_таблицы -> GROUPBYid,valORDERBYval;
В MySQL 3.23 и выше псевдонимы не обязательны. В этих версиях в конструкциях ORDER by и GROUP by можно использовать выражения, например:
mysql> SELECT id, FLOOR (value/100) FROM шя_таблишORDER BY RAND();

MySQL расширяет применение GROUP BY таким образом, что вы можете использовать столбцы или вычисления в списке SELECT, которые не появляются в конструкции GROUP BY. То есть предполагается применение любого возможного значения для данной группы. Вы можете использовать это для получения более высокой производительности за счет отсутствия необходимости в сортировке и группировании по ненужным позициям. На­пример, вам не потребуется группировать по customer.name в следующем запросе:
mysql> SELECT order.custid, customer.name, MAX(payments)-> FROM order,customer-> WHERE order.custid = customer.custid-> GROUP BY order.custid;
В стандартном SQL вы должны добавить customer.name в конструкцию GROUP BY. В MySQL это излишне, если только вы не работаете в режиме ANSI.
Не используйте это средство, если значения столбцов, пропущенных в GROUP BY, не являются уникальными в пределах группы. В таком случае могут быть получены не­предсказуемые результаты.
В некоторых случаях можно использовать MIN() и МАХ() для получения специфиче­ских значений столбцов, если они не уникальны. Приведенное ниже выражение выдает значение column из строки, содержащей наименьшее значение столбцы sort:
SUBSTR(MIN (CONCAT(RPAD(sort,6,' '),column)),7)
Следует отметить, что если вы используете MySQL версии 3.22 или предшествую­щей, либо если вы пытаетесь следовать стандарту SQL, то нельзя использовать выраже­ния в предложениях ORDER BY и GROUP BY. Эти ограничения можно обойти с помощью псевдонимов выражений:
mysql> SELECTid,FLOOR(value/100)ASvalFROM имя_таблицы -> GROUPBYid,valORDERBYval;
В MySQL 3.23 и выше псевдонимы не обязательны. В этих версиях в конструкциях ORDER by и GROUP by можно использовать выражения, например:
mysql> SELECT id, FLOOR (value/100) FROM шя_таблишORDER BY RAND();