哪个数据库有更多的窗口函数MySQL 8.0或PostgreSQL 10的覆盖范围?

问题描述 投票:2回答:2

我对移动窗口范围的计算统计感兴趣

postgresql-10 mysql-8.0
2个回答
0
投票

我不确定你在寻找什么,但是对于窗口函数,MySQL 8.0和PostgreSQL 10都实现了相同的一组。他们都支持PARTITION BYORDER BY条款。

CUME_DIST()
DENSE_RANK()
FIRST_VALUE()
LAG()
LAST_VALUE()
LEAD()
NTH_VALUE()
NTILE()
PERCENT_RANK()
RANK()
ROW_NUMBER()

Click here for PostgreSQL

Click here for MySQL


0
投票

PostgreSQL 11通过实现较少见的窗框单位GROUPS(除了ROWSRANGE)以及通过添加对(在我看来是奥术)窗口框架排除子句的支持而再次领先。

PostgreSQL 11中可能的一个例子,而不是MySQL 8的一个例子是:

WITH t(v) AS (
  VALUES (1), (1), (3), (5), (5), (5), (6)
)
SELECT
  v,
  array_agg(v) OVER (o GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW) AS current,
  array_agg(v) OVER (o GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE GROUP) AS group,
  array_agg(v) OVER (o GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE TIES) AS ties,
  array_agg(v) OVER (o GROUPS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE NO OTHERS) AS no_others
FROM t
WINDOW o AS (ORDER BY v)

产量:

v |current     |group       |ties          |no_others     |
--|------------|------------|--------------|--------------|
1 |{1,3}       |{3}         |{1,3}         |{1,1,3}       |
1 |{1,3}       |{3}         |{1,3}         |{1,1,3}       |
3 |{1,1,5,5,5} |{1,1,5,5,5} |{1,1,3,5,5,5} |{1,1,3,5,5,5} |
5 |{3,5,5,6}   |{3,6}       |{3,5,6}       |{3,5,5,5,6}   |
5 |{3,5,5,6}   |{3,6}       |{3,5,6}       |{3,5,5,5,6}   |
5 |{3,5,5,6}   |{3,6}       |{3,5,6}       |{3,5,5,5,6}   |
6 |{5,5,5}     |{5,5,5}     |{5,5,5,6}     |{5,5,5,6}     |

I've blogged about these PostgreSQL features more in detail here

© www.soinside.com 2019 - 2024. All rights reserved.