SQL-запрос не дает определенного значения и другие проблемы - PullRequest
0 голосов
/ 02 февраля 2012

)

Я делаю SQL-запрос для отображения списка рекордов нескольких пользователей на пользователя, который также должен давать средние звездочки, которых достиг конкретный пользователь, и достигнут уровень MAX, а такжеЯ хотел бы подсчитать общее время, проведенное пользователем в игре, суммируя все время по уровням ..

У меня есть следующие проблемы:

1: Мой SQL-запрос не дает мне одну строку на пользователя.

2: Суммы, которые складываются, относятся не к пользователю, а к сумме всех пользователей.

3: Avarage STARSне отображаются с десятичным числом.

4: я не могу получить "score.time_spent", чтобы вычислить сумму всего времени, в течение которого конкретный пользователь играл

Мой 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

Таблица "game_users" выглядит следующим образом:

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

Может кто-нибудь помочь мне в этом беспорядке?: -)

С наилучшими пожеланиями

Стиг: -)

Ответы [ 2 ]

1 голос
/ 02 февраля 2012

Попробуйте сделать ваши агрегаты в подзапросе. Я не уверен, что это именно то, что вам нужно, но это должно направить вас в правильном направлении:

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
0 голосов
/ 02 февраля 2012

Похоже, это должно решить:

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

Примечание: линия CAST с этого сайта - http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=121027

РЕДАКТИРОВАТЬ: Литые звезды как плавающие.

...