如何计算表

时间:2015-12-01 14:00:30

标签: mysql sql

可能是一个简单的问题,但它让我陷入困境:

如果我有三张桌子:

杂志表:

杂志(标题,出版商,主题)

客户:

客户( cid ,姓名)

以及客户对杂志的订阅:

订阅( cid,title,publisher ,start_date)

正如您所看到的,杂志表的主键有两个属性,那么如何编写一个查询来计算杂志中每个客户的订阅数量?

我试过了:

select cid, count(distinct title)
from subscriptions
group by cid

但是它计算每个客户的杂志标题数量,而不是杂志的主题与出版商的组合(两种不同的杂志可以有相同的标题,但不同的出版商)。

3 个答案:

答案 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