2010-11-27 1 views
1

Скажем, у меня есть таблица с двумя столбцами, X и Y. Я хотел бы выполнить следующий запрос через спящий режим:Фильтрация на вычисленных столбцах в спящем режиме? (HAVING)

SELECT X*X + Y*Y AS Distance, POINTS.* from POINTS 
WHERE X > 0 
AND Y > 0 
HAVING Distance < 50 

Как достичь этого с помощью спящего режима? Можете ли вы предоставить образец кода?

Редактировать - This question кажется сильно связанным. Единственная причина, по которой я не закрываю эту проблему как дубликат, заключается в том, что она обеспечивает гораздо более простой вариант использования (без GROUP BY).

+0

Этот синтаксис недействителен. HAVING без группировки с использованием GROUP BY не разрешено SQL – 2010-11-27 13:27:40

ответ

0

В большинстве диалектов SQL вы не можете использовать «отображаемую метку» или имя в «AS name», чтобы ссылаться на выражение внутри тела запроса - к большому огорчению людей. Однако вы можете использовать выражение в предложении WHERE.

SELECT X*X + Y*Y AS DistanceSquared, POINTS.* from POINTS 
WHERE X > 0 
    AND Y > 0 
    AND (X * X + Y * Y) < 50; 

на обладание раздел связан с агрегатами и сравнений на агрегатов:

SELECT name, COUNT(*) 
    FROM SomeWhere 
GROUP BY Name 
HAVING COUNT(*) > 1; 

Условия в пункте HAVING должен (должны) включать в себя по меньшей мере один «прямой» совокупности; другой термин в состоянии может быть константой (как показано) или другим прямым агрегатом или подзапросом, возможно, с участием «косвенных» агрегатов. (AFAIK, я придумал «прямую/косвенную» терминологию для этого ответа - вы, вероятно, не сможете найти выражение полезнее.)

Смежные вопросы