#sql #h2 #window-functions
#sql #h2 #window-функции
Вопрос:
такой SQL, как
SELECT empno, deptno,
COUNT(*) OVER (PARTITION BY deptno) DEPT_COUNT FROM emp WHERE deptno IN (20, 30);
очень полезно.
Мне просто интересно, есть ли в H2, как мы реализуем аналогичную функцию? Возможно, создание процедуры java сработает. Но будет ли эта функция находиться внутри дорожной карты базы данных H2?
Ответ №1:
В H2 нет поддержки оконных функций.
Это недавно обсуждалось на форуме H2:
http://groups.google.com/group/h2-database/browse_thread/thread/3899106a85851de3#
Комментарии:
1. Это правда, H2 в настоящее время не поддерживает оконные функции. Итак, обходной путь заключается:
select empno, deptno, (select count(*) from emp e2 where e2.deptno=e.deptno) dept_count from emp e where deptno in (20, 30);
2. Очень хороший и быстрый ответ. Я прочитал содержимое ссылки. В моей работе без оконных функций мне приходится использовать подзапросы, что делает SQL намного сложнее и подверженным ошибкам.