mysql - 无论用户是否存在,表字段的 SUM

标签 mysql sum

我有一个脚本可以在简单的成就类型脚本中计算用户积分,然后按顺序将它们显示在网页上。我有以下 mySQL 函数,但如果用户还没有任何点(即没有找到“pa.userid”,则根本不会获取用户)

SELECT u.userid,
SUM(IF(pa.plus = '1', pa.points_amount, 0)) - SUM(IF(pa.plus = '0', pa.points_amount, 0)) AS points
FROM awarded_points pa,
users u WHERE u.userid = pa.userid 
GROUP BY u.userid 
ORDER BY points DESC 
LIMIT 10

我如何使上述代码包含尚未获得任何积分的用户?这是一个复杂的改变吗?

最佳答案

使用左外连接

SELECT u.userid,
       SUM(IF(pa.plus = '1', pa.points_amount, 0)) - SUM(IF(pa.plus = '0', pa.points_amount, 0)) AS points
FROM users u
LEFT OUTER JOIN awarded_points pa ON u.userid = pa.userid 
GROUP BY u.userid 
ORDER BY points DESC 
LIMIT 10

看到great explanation of joins

关于mysql - 无论用户是否存在,表字段的 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471501/

相关文章:

MySQL的alter table查询非常慢

php - 带有逗号分隔值的 Codeigniter Mysql 列

php - 使用连接表保存从下拉菜单中选择的信息

sql - 具有 GROUP BY 和聚合函数的多个 INNER JOIN

mysql - 复杂的 MySQL 查询问题

php - prestashop 将值插入数据库显示意外的 T_STRING

sql - 将项目名称和总小时数分组在一起 SQL JOIN ON

mysql - 在sql中设置总和的小数位

mysql - 选择限制行数的 MAX 值

mysql - SUM 并从 MySQL 中的两个表中获取 AVG,并根据它们的 DATE 使用 WHERE 子句