Способна ли база данных H2 выполнить SQL-запрос предложения over с помощью агрегатной функции?

#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 намного сложнее и подверженным ошибкам.