元组关系微积分中的聚合函数

lpo*_*ula 5 sql database

您如何将在 SQL 中找到的aCOUNT或 aGROUP BY或任何其他聚合函数转换为 TRC,我在互联网上找不到任何方法。

所以我有一张桌子 User

    +----+----------+--+
    |    |   User   |  |
    +----+----------+--+
    | pk | email    |  |
    |    | password |  |
    |    | ...      |  |
    +----+----------+--+
Run Code Online (Sandbox Code Playgroud)

还有一张桌子 frienship

+----+-------------+--+
|    | FriendShip  |  |
+----+-------------+--+
| pk | user1_email |  |
| pk | user2_email |  |
|    | date        |  |
|    | accepted    |  |
+----+-------------+--+
Run Code Online (Sandbox Code Playgroud)

以及以下 SQL 查询:

SELECT * 
FROM user u 
LEFT OUTER JOIN friendship f ON (f.user1_email = u.email 
                                 OR f.user2_email = u.email)
GROUP BY u.email 
HAVING COUNT(u.email) < 3
Run Code Online (Sandbox Code Playgroud)

我想这个查询转换成元组关系演算时,JOINSELECT是非常简单的,但是对于GROUP BYCOUNT我不知道。

谢谢,

lpo*_*ula 4

正如 Lennart 所说,不可能表达这些函数,因此我决定以另一种方式转换计数。

首先让我们断言以下谓词:

友谓词

那么我们可以说,拥有 2 个或更少的朋友,就是拥有 0 个朋友、1 个或 2 个朋友。拥有 1 个朋友就像说存在一个朋友 (friend1),而 Friends(me,friend1) 为真。

要拥有 2 个朋友,您必须有 1 个朋友和另一个不同的朋友。最后,你不能再有任何朋友了。

这一切都可以这样表达:

查询