可能是一个简单的问题,但它让我陷入困境:
如果我有三张桌子:
杂志表:
杂志(标题,出版商,主题)
客户:
客户( cid ,姓名)
以及客户对杂志的订阅:
订阅( cid,title,publisher ,start_date)
正如您所看到的,杂志表的主键有两个属性,那么如何编写一个查询来计算杂志中每个客户的订阅数量?
我试过了:
select cid, count(distinct title)
from subscriptions
group by cid
但是它计算每个客户的杂志标题数量,而不是杂志的主题与出版商的组合(两种不同的杂志可以有相同的标题,但不同的出版商)。
答案 0 :(得分:0)
您可以尝试使用:
select cid, count(distinct (title || publisher))
from subscribes group by cid;
提供||
是字符串连接运算符。
答案 1 :(得分:0)
假设AsRef<OsStr>
实际上是(cid, title, publisher)
或PRIMARY KEY
,您可以使用UNIQUE
来计算每个组中的所有行:
COUNT(*)
答案 2 :(得分:0)
您应该考虑数据模型,而不是尝试制定查询来解决问题。您将存储标题和发布者两次,从而导致冗余。最好将一个人工密钥 mid 添加到杂志,并在关系表订阅中使用此密钥,从而产生以下结果:
magazine (mid, title, publisher, topic);
customer (cid, name);
subscription (cid, mid, start_date);
现在生成的查询很简单:
SELECT cid, count(mid)
FROM subscription
GROUP BY cid