Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询没有给出明确的值和其他问题_Sql_Sum_Distinct - Fatal编程技术网

SQL查询没有给出明确的值和其他问题

SQL查询没有给出明确的值和其他问题,sql,sum,distinct,Sql,Sum,Distinct,) 我正在进行一个SQL查询,以显示每个用户的多个用户分数的高分列表,该列表还应给出特定用户已获得的分数以及达到的最高级别,并且我还希望通过将每个级别的所有时间相加来计算用户在游戏中花费的总时间 我有以下问题: SELECT DISTINCT game_users.username AS 'User Name', 'Level Reached' = (SELECT DISTINCT MAX(score.game_level) FROM score WHERE score.game

)

我正在进行一个SQL查询,以显示每个用户的多个用户分数的高分列表,该列表还应给出特定用户已获得的分数以及达到的最高级别,并且我还希望通过将每个级别的所有时间相加来计算用户在游戏中花费的总时间

我有以下问题:

SELECT DISTINCT
game_users.username AS 'User Name',
'Level Reached' = (SELECT DISTINCT MAX(score.game_level) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
score.time_spent AS 'Total Time Spent',
'Stars' = (SELECT DISTINCT AVG(score.stars) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
'High Score' = (SELECT DISTINCT SUM(score.game_level_score) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
game_users.current_state AS 'Online State'          
FROM
game_users
INNER JOIN score ON game_users.id = score.game_users_id
GROUP BY
game_users.id,
game_users.username,
score.game_level_score,
score.game_level,
score.time_spent,
score.stars,
game_users.current_state
GO
id                      int     Unchecked
firstname       varchar(100)    Checked
lastname        varchar(100)    Checked
email           varchar(100)    Checked
username        varchar(50)     Checked
usr_pass        varchar(50)     Checked
current_state           int     Checked
id                         int      Unchecked
game_users_id              int      Unchecked
game_level          varchar(4)      Checked
game_level_score    numeric(18, 0)  Checked
stars                      int      Checked
time_spent             time(7)      Checked
1:我的SQL查询没有为每个用户提供一行

2:正在计算的总和不是每个用户的总和,而是所有用户的总和

3:avarage星星不以十进制显示

4:我无法获取“score.time_-speed”来计算特定用户一直在玩的所有时间的总和

目前我的SQL查询如下所示:

SELECT DISTINCT
game_users.username AS 'User Name',
'Level Reached' = (SELECT DISTINCT MAX(score.game_level) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
score.time_spent AS 'Total Time Spent',
'Stars' = (SELECT DISTINCT AVG(score.stars) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
'High Score' = (SELECT DISTINCT SUM(score.game_level_score) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
game_users.current_state AS 'Online State'          
FROM
game_users
INNER JOIN score ON game_users.id = score.game_users_id
GROUP BY
game_users.id,
game_users.username,
score.game_level_score,
score.game_level,
score.time_spent,
score.stars,
game_users.current_state
GO
id                      int     Unchecked
firstname       varchar(100)    Checked
lastname        varchar(100)    Checked
email           varchar(100)    Checked
username        varchar(50)     Checked
usr_pass        varchar(50)     Checked
current_state           int     Checked
id                         int      Unchecked
game_users_id              int      Unchecked
game_level          varchar(4)      Checked
game_level_score    numeric(18, 0)  Checked
stars                      int      Checked
time_spent             time(7)      Checked
游戏用户表如下所示:

SELECT DISTINCT
game_users.username AS 'User Name',
'Level Reached' = (SELECT DISTINCT MAX(score.game_level) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
score.time_spent AS 'Total Time Spent',
'Stars' = (SELECT DISTINCT AVG(score.stars) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
'High Score' = (SELECT DISTINCT SUM(score.game_level_score) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
game_users.current_state AS 'Online State'          
FROM
game_users
INNER JOIN score ON game_users.id = score.game_users_id
GROUP BY
game_users.id,
game_users.username,
score.game_level_score,
score.game_level,
score.time_spent,
score.stars,
game_users.current_state
GO
id                      int     Unchecked
firstname       varchar(100)    Checked
lastname        varchar(100)    Checked
email           varchar(100)    Checked
username        varchar(50)     Checked
usr_pass        varchar(50)     Checked
current_state           int     Checked
id                         int      Unchecked
game_users_id              int      Unchecked
game_level          varchar(4)      Checked
game_level_score    numeric(18, 0)  Checked
stars                      int      Checked
time_spent             time(7)      Checked
评分表如下所示:

SELECT DISTINCT
game_users.username AS 'User Name',
'Level Reached' = (SELECT DISTINCT MAX(score.game_level) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
score.time_spent AS 'Total Time Spent',
'Stars' = (SELECT DISTINCT AVG(score.stars) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
'High Score' = (SELECT DISTINCT SUM(score.game_level_score) FROM score
        WHERE score.game_users_id IN
        (SELECT game_users_id FROM game_users
        WHERE game_users.id = score.game_users_id)),
game_users.current_state AS 'Online State'          
FROM
game_users
INNER JOIN score ON game_users.id = score.game_users_id
GROUP BY
game_users.id,
game_users.username,
score.game_level_score,
score.game_level,
score.time_spent,
score.stars,
game_users.current_state
GO
id                      int     Unchecked
firstname       varchar(100)    Checked
lastname        varchar(100)    Checked
email           varchar(100)    Checked
username        varchar(50)     Checked
usr_pass        varchar(50)     Checked
current_state           int     Checked
id                         int      Unchecked
game_users_id              int      Unchecked
game_level          varchar(4)      Checked
game_level_score    numeric(18, 0)  Checked
stars                      int      Checked
time_spent             time(7)      Checked
有人能帮我摆脱困境吗?:-)

致意


Stig:-)

尝试在子查询中进行聚合。我不确定这是否正是您所需要的,但它应该为您指明正确的方向:

SELECT  Game_Users.userName,
        MaxLevel,
        TimeSpent,
        Stars,
        HighScore,
        Game_Users.Current_State [Online State]
FROM    game_users
        INNER JOIN
        (   SELECT  Game_users_ID, 
                    MAX(Game_Level) [MaxLevel], 
                    AVG(Stars * 1.0) [Stars], 
                    SUM(game_level_Score) [HighScore],
                    SUM(DATEDIFF(SECOND, 0, CAST(GETDATE() AS TIME))) [TimeSpent]
            FROM    Score
            GROUP BY Game_Users_ID
        ) score
            ON score.Game_Users_ID = game_users.ID

看起来这应该可以解决这个问题:

SELECT a.username AS 'User Name'
    , MAX(b.game_level) AS 'Level Reached'
    , CAST(DATEADD(millisecond,SUM(DATEDIFF(millisecond,0,CAST(b.time_spent AS DATETIME))),0) AS TIME) AS 'Total Time Spent'
    , AVG(CAST(b.stars AS FLOAT)) AS 'Stars'
    , SUM(b.game_level_score) AS 'High Score'
    , a.current_state AS 'Online State'
FROM game_users a
JOIN score b
    ON a.id = b.game_users_id
GROUP BY a.username, a.current_state
注:铸造线来自该现场-


编辑:将星星铸造为浮动。

谢谢你们的回答:-)诺拉,你已经100%解决了所有问题,我实际上可以复制/粘贴脚本,效果非常好!非常感谢:-)/Stig:-)谢谢你们两位的回答:-)Norla,你已经100%解决了所有问题,我实际上可以复制/粘贴脚本,效果非常好!非常感谢:-)/Stig:-)