2013-11-27 2 views
0

Могу ли я иметь арифметический оператор в SQL, имеющий предложение? Потому что из того, что я знаю, арифметические операторы допускаются только в предложениях SELECT и WHERE. Но следующий код имеет смысл для меня, хотя, но я знаю, что это нецелесообразно. Любой совет?Арифметический оператор в предложениях SQL HAVING

SELECT E.name 
FROM Example E 
GROUP BY E.name 
HAVING COUNT(*) + 2 > 4 
+5

Почему бы вам просто не попробовать и не посмотреть, что вы получаете? –

ответ

1

Да, вы можете использовать «арифметический оператор» в HAVING предложении.

Выражение в предложении HAVING будет оцениваться как булево.


ПРИМЕЧАНИЕ. Убедитесь, что порядок приоритета - это то, что вы ожидаете, например.

(COUNT(*) + 2) > 4 

против

COUNT(*) + (2 > 4) 

В вашем примере, добавление не действительно требуется; выражение может быть заменено логически эквивалентным:

COUNT(*) > 2 
+0

Просто побочное примечание: ваш второй пример потерпит неудачу почти во всех других СУБД, поскольку MySQL не проводит различий между булевыми значениями и числами. Все, что не равно 0, считается «истинным» –

+0

. Любое ненулевое значение, не равное нулю, считается «истинным». – spencer7593

1

Если вы хотите более сложное арифметическое выражение, вы можете использовать подзапрос:

select 
    * 
from 
(
    select 
     cnt = COUNT(*) + 2 
     , E.Name 
    from 
     Example E 
    group by 
     E.name 
) as subQ 
where 
    subQ.cnt > 4 
+0

«Если вам нужен более сложный ...» hahaha –

+0

Должен 'cnt = ...' быть '... как cnt'? – Krease

+0

@ Крис: Либо одна из этих работ (по крайней мере, в T-SQL). – Tonci

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