数据库
首页 > 数据库> > SQL-如何计算TableA中的出现次数,与TableB连接,然后按出现次数排序?

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 PavlovKirill 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