Макс (отличный ...) в MySQL? - PullRequest
       10

Макс (отличный ...) в MySQL?

2 голосов
/ 13 февраля 2009

Согласно документации , в MySQL агрегатные функции Max () и Min () принимают ключевое слово DISTINCT:

Ключевое слово DISTINCT может использоваться для найти максимум отличительного значения expr, однако, это производит тот же результат, что и пропуск DISTINCT.

Может быть, я что-то упускаю, но как это может быть полезным?

UPDATE:

MySQL не поддерживает , в отличие от нескольких ответов, для каждой функции агрегирования поддерживается отдельно.

Различия поддерживаются для avg (), count (), min (), max (), group_concat () и sum (). Он не поддерживается для std (), variance (), некоторых других статистических функций или для побитовых агрегатных функций.

Ответы [ 6 ]

5 голосов
/ 13 февраля 2009

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

Счетчик - это ключевой пример того, где отличные будут давать разные результаты.

1 голос
/ 13 февраля 2009

Несмотря на это, стандарт ANSI SQL указывает, что все агрегатные функции принимают необязательное ключевое слово DISTINCT. В случае MIN() и MAX() это кажется бессмысленным, поскольку результат в любом случае одинаков.

Но для других агрегатных функций, таких как COUNT(), SUM() и AVG(), опция DISTINCT может повлиять на результат.

Я бы предположил, что стандартный SQL требует, чтобы каждая агрегатная функция поддерживала DISTINCT, чтобы упростить синтаксис языка. Не вредно поддерживать DISTINCT там, где это не имеет никакого эффекта, и любая реализация может рассматривать его как запрет на внутреннюю работу.

1 голос
/ 13 февраля 2009

Я думаю, что обычно разрешается / поддерживается использование DISTINCT в агрегатных функциях, даже если это не влияет на результат.

0 голосов
/ 13 февраля 2009

Насколько я знаю, в стандарте SQL92 определены пять агрегатных функций. Эти пять: среднее, количество, максимум, минимум и сумма. По совпадению * все они принимают ключевое слово DISTINCT.

* и под этим я подразумеваю "не случайно"

0 голосов
/ 13 февраля 2009

Я тоже почесываю голову; Единственное, что я могу придумать, это то, что select max (foo) может выполнить сканирование таблицы, чтобы найти максимальное значение, но select max (Different foo) может сначала перейти к индексу. Может быть, быстрее при определенных размерах стола?

0 голосов
/ 13 февраля 2009

Максимальное значение отдельного набора будет точно таким же, как и у того же набора с дубликатами, по определению.

Но, чтобы ответить на ваш вопрос, это может быть полезно в сочетании с другими агрегатными функциями в предложении select, работающими с теми же различными значениями.

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