根据两行计算SQL结果

时间:2015-04-13 00:37:55

标签: php mysql sql database

这是我的SQL结构示例:

magazines
     magazines.id
     magazines.templateId
     magazines.userId

我想计算用户使用特定模板ID的次数。

考虑3个模板id:100,101和102并考虑5个用户(10,20,30,40,50)。这是SQL数据的一个示例:

magazines
     1, 100, 10
     2, 100, 20
     3, 100, 30

这里,3个不同的用户拥有模板#100。但是查询的结果应该是[100 = 1],因为它是不同的用户。另一方面,如果我有:

magazines
     1, 100, 10
     2, 100, 10

我应该有templateId [100 = 2]。

我尝试使用GROUP BY和UNIQUE进行多次查询,结果完全错误。如果有人可以提供帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

如果您想要用户使用模板的最大次数:

select templateid, userid, count(*)
from magazines m
where temploateid = X
group by templateid, userid
order by count(*) desc
limit 1;

编辑:

您可以通过聚合两次获得所需内容:

select templateid, cnt, count(*) as numUsers
from (select templateid, userid, count(*) as cnt
      from magazines m
      where temploateid = X
      group by templateid, userid
     ) tu
group by templateid, cnt
order by templateid, cnt;

答案 1 :(得分:0)

这将为您提供每个用户使用特定模板的次数:

SELECT
  templateId,
  userId,
  COUNT(id) as cnt
FROM
  Magazines GROUP BY templateId, userId

如果您的表格包含以下数据:

  (1, 100, 10),
  (2, 100, 10),
  (3, 100, 20),
  (4, 100, 30)

然后你的结果集将是:

templateId  userId  cnt
100         10      2
100         20      1
100         30      1