Php 根据两行计算SQL结果
下面是我的SQL结构示例:Php 根据两行计算SQL结果,php,mysql,sql,database,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。但是查询的结果
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]
我尝试了多次使用GROUPBY和UNIQUE、BY查询,结果完全错误。如果有人可以帮助,谢谢。如果您希望用户使用模板的最大次数:
select templateid, userid, count(*)
from magazines m
where temploateid = X
group by templateid, userid
order by count(*) desc
limit 1;
SELECT
templateId,
userId,
COUNT(id) as cnt
FROM
Magazines GROUP BY templateId, userId
编辑:
通过两次聚合,您可以得到您想要的:
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;
这将获得每个用户使用特定模板的次数:
select templateid, userid, count(*)
from magazines m
where temploateid = X
group by templateid, userid
order by count(*) desc
limit 1;
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
谢谢这是一条很好的赛道。事实上,我需要我的模板使用计数。模板1,使用一次=X个用户,使用两次=X个用户,依此类推到20。是否可以更新查询?谢谢