代码之家  ›  专栏  ›  技术社区  ›  Sanchit Gupta

MySQL:获取每个用户的状态(待定和已批准)计数

  •  0
  • Sanchit Gupta  · 技术社区  · 7 年前

    我正在做一个项目,坚持一个观点。问题是我有以下两个表:

    1. users :
    +----+------+
    | id | name |
    +----+------+
    |  1 | ABC  |
    |  2 | XYZ  |
    |  3 | JKL  |
    +----+------+
    
    2. user_mistakes :
    +----+---------+-------------+--------+
    | id | user_id |   mistake   | status |
    +----+---------+-------------+--------+
    |  1 |       1 | Lorem ipsum |      1 |
    |  2 |       1 | Lorem ipsum |      1 |
    |  3 |       2 | Lorem ipsum |      0 |
    |  4 |       2 | Lorem ipsum |      1 |
    +----+---------+-------------+--------+
    

    在哪里? user_mistakes . status 0=待定,1=已批准

    根据以上内容 users 用户错误 表数据,我希望每个用户的挂起和批准状态计数如下:

    +---------+------+------------------+-------------------+
    | user_id | name | pending_mistakes | approved_mistakes |
    +---------+------+------------------+-------------------+
    |       1 | ABC  |                0 |                 2 |
    |       2 | XYZ  |                1 |                 1 |
    |       3 | JKL  |                0 |                 0 |
    +---------+------+------------------+-------------------+
    

    有没有任何方法可以通过单个查询实现这一点?

    谢谢你

    2 回复  |  直到 7 年前
        1
  •  1
  •   Kamlesh Verma    7 年前

    SELECT
        users.id,users.name,
        SUM(IF(mistakes.status=1, 1, 0)) AS approved_mistakes,
        SUM(IF(mistakes.status=0, 1, 0)) AS pending_mistakes
    FROM users
    LEFT JOIN mistakes ON mistakes.user_id = users.id
    GROUP BY mistakes.user_id
    

        2
  •  0
  •   Deepak Kumar    7 年前