MySQL - 错误的值

标签 mysql sql

我尝试计算一些数字,我一直发誓,因为它失败了,然后我尝试了这个:

SELECT SUM( 10 *1 ) 
FROM user_achievements
INNER JOIN achievements
WHERE user_achievements.user_id =8

上面写着:420 ?!?

我尝试让它工作:

SELECT SUM((SELECT score_base FROM achievements WHERE id = user_achievements.achievement_id)*((SELECT pixels_multiplier FROM achievements WHERE id = user_achievements.achievement_id)) * achievement_level) * achievement_level FROM user_achievements INNER JOIN achievements WHERE user_achievements.user_id=2

成就: ID, 水平, 像素基数, 分数基础, 像素乘数

用户成就: 用户身份, 成就_id, 成就级别

最佳答案

如果您的查询返回420,则意味着聚合前结果集中返回了42行。

这是您的查询:

SELECT sum(10*1)
FROM user_achievements ua cross join
     achievements a
WHERE ua.user_id = 8;

如果我不得不猜测,你错过了一个连接:

SELECT sum(10*1)
FROM user_achievements ua join
     achievements a
     on ua.achievement_id = a.id
WHERE ua.user_id = 8;

编辑:

这是评论中的查询:

SELECT sum((SELECT score_base
            FROM achievements
            WHERE id = ua.achievement_id
            ) *
            (SELECT pixels_multiplier
             FROM achievements
             WHERE id = ua.achievement_id
            )
           )
FROM user_achievements ua join
     achievements a
     on ua.achievement_id = a.id
WHERE ua.user_id = 2;

它甚至不应该解析。聚合中不允许使用子查询。试试这个:

SELECT sum(a.score_base * a.pixels_multiplier)
FROM user_achievements ua join
     achievements a
     on ua.achievement_id = a.id
WHERE ua.user_id = 2;

关于MySQL - 错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21499151/

相关文章:

SQL ORDER BY(有异常(exception))

PHP - Join 语句重复记录

php - 1 天后自动删除行不会使用 php

PHP 注册脚本不工作

sql - 如何在 Golang 中缓存到不同 Postgres/MySQL 数据库的连接?

sql - PostgreSQL:如何根据相同的开始和结束时间(没有时区的时间戳)连接两个表?

java - 更新以 mysql blob 格式保存的图像

mysql - 选择查询的第 n 个结果

mysql - 选择按另一列分组的价格最低的行

有条件地从其他表进行 SQL 更新