Какая наименее дорогая агрегатная функция в отсутствие ЛЮБОГО () - PullRequest
8 голосов
/ 19 мая 2011

Я обычно использую MAX () или MIN (), если СУБД не имеет ЛЮБОЙ () агрегатной функции.

Есть ли что-то менее дорогое в mySQL и MS-SQL?

Ответы [ 4 ]

3 голосов
/ 19 мая 2011

Существует нет ЛЮБОГО агрегата в ANSI SQL-92

Там есть ЛЮБОЙ квалификатор для соответствия НЕКОТОРЫМ и ВСЕМ

MIN и MAX являются правильными агрегатами ... совершенно не связаны и не должны сравниваться

Редактировать:

Только у MySQL эта неоднозначность "ЛЮБОГО" агрегата: SQL Server, Sybase, Oracle, PostGres нет.См. Должны ли все столбцы в списке SELECT появляться в предложении GROUP BY

2 голосов
/ 19 мая 2011

MySQL не требуется ЛЮБОЙ () агрегат.

если я сделаю

SELECT field1, field2, SUM(field3) FROM table1 
GROUP BY field2

Microsoft T-SQL будет жаловаться, но

MySQL просто тихо выполнит

SELECT whatever(field1), field2, SUM(.... 

Что, конечно, намного быстрее, чем SELECT max(field1), field2, SUM(.... GROUP BY field2

MySQL поддерживает ANY, но SELECT ANY(field1) ... не работает, потому что ANY - оператор, подобный IN и ALL.
см .: http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html

Я люблю MySQL

1 голос
/ 19 мая 2011

MIN и MAX одинаково (в) дорого.

0 голосов
/ 15 марта 2015

Хорошо, давайте перефразируем оригинальный вопрос. Вместо ЛЮБОГО, что неоднозначно и не является стандартом SQL, было бы замечательно, если бы была предусмотрена функция агрегирования EXISTS.

Несколько раз я использовал «count (external.column)> 0» для имитации «exist (outer.column)», что, возможно, было бы дешевле, так как подсчет в любом случае отбрасывается.

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