SQL-如何计算TableA中的出现次数,与TableB连接,然后按出现次数排序?
作者:互联网
我想要的是:
对于连接到Group_ID = 1的每个用户,我要计算该用户已参加的活动数量,并使用该信息按出席人数最多的DESC(结束)用户排序.
将用户连接到组的表:
user_r_group:
ID User_ID Group_ID
1 1 1
2 3 1
3 2 1
4 1 2 <-- User 1 connected to another group
表格显示用户参加了哪些活动:
activities_attended:
ID Activity_ID User_ID
1 1 1 <-- User 1 have attended 3 activities
2 1 3
3 1 2
4 2 1 <-- User 1 have attended 3 activities
5 2 3
6 3 1 <-- User 1 have attended 3 activities
我正在寻找的结果:
User_ID Attendings
1 3
3 2
2 1
有没有办法编写一个mysql_query来实现这一目标?
感觉确实像这样.还是我需要使用querycombinations混淆php中的循环?
我已经检查了join tables的方法,并且对ORDER BY有点熟悉,但是我不知道如何存储每个用户的出席信息,然后按顺序进行排序,然后将其全部组合成一个查询想要; /请给我一点帮助吗?
解决了!
感谢GordonM提供了有关外观的指导,并感谢Milen Pavlov和Kirill Fuchs提供了代码示例.我将代码合并到自己喜欢的版本中.然而,基里尔的代码是准确的,但有例外,他最后忘记了“ ORDER BY Attendings DESC”;)
SELECT
COUNT(aa.User_ID) as Attendings,
urg.User_ID
FROM
activities_attended aa
INNER JOIN user_r_group urg ON urg.User_ID=aa.User_ID
WHERE
urg.Group_ID=1
GROUP BY
urg.User_ID
ORDER BY
Attendings DESC
解决方法:
您将必须使用联接.下面的例子:
SELECT `user_r_group`.`User_ID`, count(`activities_attended`.`ID`) AS Attendings
FROM `user_r_group`
INNER JOIN `activities_attended`
ON `user_r_group`.`User_ID` = `activities_attended`.`User_ID`
WHERE `user_r_group`.`Group_ID` = 1
GROUP BY `user_r_group`.`User_ID`
ORDER BY Attendings DESC
标签:join,count,sql-order-by,mysql,php 来源: https://codeday.me/bug/20191122/2061149.html