Каково различие между НАЛИЧИЕМ и ГДЕ?

255
задан Tigerjz32 21 September 2018 в 19:13
поделиться

8 ответов

НАЛИЧИЕ определяет условие поиска для группы или агрегатной функции, используемой в операторе SELECT.

Источник

89
ответ дан Dorian 23 November 2019 в 02:46
поделиться

В Агрегатном запросе (Любой запрос, Где агрегатная функция используется) Предикаты в, где пункт оценены, прежде чем агрегированный промежуточный набор результатов сгенерирован,

, Предикаты в пункте Наличия применяются к набору итогового результата ПОСЛЕ ТОГО, КАК это было сгенерировано. Вот почему условия предиката на итоговых значениях должны быть помещены в Наличие пункта, не в оператор Where, и почему можно использовать псевдонимы, определенные в Избранном пункте в Пункте Наличия, но не в операторе Where.

1
ответ дан Charles Bretana 23 November 2019 в 02:46
поделиться

ГДЕ применяется как ограничение, на съемочной площадке возвращенное SQL; это использует встроенный набор SQL oeprations и индексы и поэтому является самым быстрым способом отфильтровать наборы результатов. Всегда используйте ГДЕ, когда это возможно.

НАЛИЧИЕ необходимо для некоторых совокупных фильтров. Это фильтрует запрос ПОСЛЕ ТОГО, КАК sql получил, собрал и отсортировал результаты. Поэтому это намного медленнее, чем, ГДЕ и должен избежаться кроме тех ситуаций, которые требуют его.

SQL Server позволит Вам сойти с рук использование НАЛИЧИЯ даже когда, ГДЕ было бы намного быстрее. Не делайте этого.

8
ответ дан davidcl 23 November 2019 в 02:46
поделиться

HAVING используется, когда Вы используете агрегат такой в качестве GROUP BY.

SELECT edc_country, COUNT(*)
FROM Ed_Centers
GROUP BY edc_country
HAVING COUNT(*) > 1
ORDER BY edc_country;
12
ответ дан Galwegian 23 November 2019 в 02:46
поделиться

Пункт НАЛИЧИЯ был добавлен к SQL, потому что, ГДЕ ключевое слово не могло использоваться с агрегатными функциями.

Выезд этот ссылка w3schools для получения дополнительной информации

Синтаксис:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
<час>

запрос А, такой как это:

SELECT column_name, COUNT( column_name ) AS column_name_tally
  FROM table_name
 WHERE column_name < 3
 GROUP 
    BY column_name
HAVING COUNT( column_name ) >= 3;

... может быть переписан с помощью полученной таблицы (и опустив HAVING) как это:

SELECT column_name, column_name_tally
  FROM (
        SELECT column_name, COUNT(column_name) AS column_name_tally
          FROM table_name
         WHERE column_name < 3
         GROUP 
            BY column_name
       ) pointless_range_variable_required_here
 WHERE column_name_tally >= 3;
21
ответ дан onedaywhen 23 November 2019 в 02:46
поделиться

НАЛИЧИЕ: используется для проверки условий после , агрегирование происходит.
, ГДЕ: используется для проверки условий прежде , агрегирование происходит.

Этот код:

select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City

Дает Вам таблицу всех городов в MA и количестве адресов в каждом городе.

Этот код:

select City, CNT=Count(1)
From Address
Where State = 'MA'
Group By City
Having Count(1)>5

Дает Вам таблицу городов в MA больше чем с 5 адресами и количеством адресов в каждом городе.

352
ответ дан Hakan Fıstık 23 November 2019 в 02:46
поделиться

От здесь .

стандарт SQL требует, чтобы НАЛИЧИЕ сослалось только на столбцы в пункте GROUP BY или столбцы, используемые в агрегатных функциях

в противоположность оператору Where, который применяется к строкам базы данных

0
ответ дан Harry Lime 23 November 2019 в 02:46
поделиться

Я использую НАЛИЧИЕ для ограничения запроса на основе результатов агрегатной функции. НАПРИМЕР, выберите * в и тому подобное группе ЧЕМ-ТО имеющим количество (ЧТО-ТО)> 0

-1
ответ дан JasonTrue 23 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: