计算视图中的字段

Calculate fields in a view

我的 MariaDB 数据库中有以下 table 个“数字”:

id number
1 25
2 41
3 3
4 73
5 38
6 41
7 12
8 14

现在我想创建一个让我看到的视图:

这将导致此视图:

number occurrences IDdifferences
3 1 5
12 1 1
14 1 0
25 1 7
38 1 3
41 2 2
73 1 4

所以我开始:

SELECT DISTINCT number FROM numbers 

然后在同一个 table 上左连接到 count ,但这会使查询变慢(而且它没有按我想要的方式工作)。你知道如何解决这个问题吗?非常感谢!

你可以按数字分组并使用 COUNT() 聚合函数获取列 occurrencesMAX() window 函数获取列 IDdifferences

SELECT number,
       COUNT(*) occurrences,
       MAX(MAX(id)) OVER () - MAX(id) IDdifferences
FROM numbers
GROUP BY number
ORDER BY number;

如果id之间有空隙:

SELECT number,
       COUNT(*) occurrences,
       MAX(MAX(rn)) OVER () - MAX(rn) IDdifferences
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn FROM numbers) t
GROUP BY number
ORDER BY number;

参见demo