php - MySQL Count 发生某事的计数

标签 php mysql sql

我们的系统跟踪用户的评论,我们希望创建一个界面,让我们可以获取房间中的所有用户以及他们所做的评论数量。

SELECT a.user_id, a.email, 
COUNT(b.review_id) as num_reviews
FROM users a LEFT JOIN reviews b ON a.user_id = b.created_by 
WHERE a.dataroom_id =  44 GROUP BY a.user_id ORDER BY num_reviews DESC

我想做这样的事情:

SELECT a.user_id, a.email, 
COUNT(b.review_id) as num_reviews, 
**COUNT(b.date_completed IS NOT NULL) AS completed** 
FROM users a LEFT JOIN reviews b ON a.user_id = b.created_by 
WHERE a.dataroom_id =  44 GROUP BY a.user_id ORDER BY num_reviews DESC

我们计算该用户同时完成的数量。上面的陈述给每个拥有 0 1 的人,其余的人与他们的总评论数相同。

理想的结果是这样的表格:

╔═════════╦═══════════════════════════════════════╗
║ User_id ║ Email       ║ # Reviews ║ # Completed ║
╠═════════╬═════════════╬═══════════╬═════════════╣
║    1    ║ test0@e.com ║     4     ║      2      ║
║    2    ║ test1@e.com ║     1     ║      0      ║
║    3    ║ test2@e.com ║     10    ║      5      ║
║    4    ║ test3@e.com ║     5     ║      3      ║

最佳答案

你不想要count() ,你想要sum() :

SELECT u.user_id, u.email, 
       COUNT(r.review_id) as num_reviews, 
       SUM(r.risk_score IS NOT NULL) AS completed 
FROM users u LEFT JOIN
     reviews r
     ON u.user_id = r.created_by 
WHERE u.dataroom_id = 44
GROUP BY u.user_id
ORDER BY num_reviews DESC;

我修复了表别名,因此它们是表名称的缩写,而不是任意别名。

哦。 。 。怎么了? count(<expression>)只是计算表达式不是 NULL 的次数。 sum(<expression>)将值相加。 MySQL(与其他数据库不同)将“true”视为 1,将“false”视为 0。因此,sum()将 bool 值为 true 的次数加起来。

或者,您也可以使用 count()没有表达式:

SELECT u.user_id, u.email, 
       COUNT(r.review_id) as num_reviews, 
       COUNT(r.risk_score) AS completed 

关于php - MySQL Count 发生某事的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395026/

相关文章:

php - 为 Woocommerce 中的特定用户角色设置最低订单金额

mysql - 如何将文档存储在目录而不是数据库中

php - 按大多数匹配项选择和排序

php 拆分大数(如 explode )

php - Symfony - 在服务中注入(inject)原则存储库

php - 有 3 个下拉列表,我想制作其中 2 个取决于第一个下拉列表的选择

mysql - Zend db 表 - save() 不保存

php - 我在通过 PHP 清除 MySQL 表时遇到问题

c# - 如何将带有 Unions 的 SQL 查询转换为 LINQ?

php,使用mysql_connect()连接数据库问题,如何解决?