Подсчитать количество ЗВЕЗД в пределах диапазона значений - PullRequest
0 голосов
/ 07 февраля 2012

Мне нужно подсчитать общее количество звездочек от общего количества пользователей STARS в следующих значениях

БАЗА ДАННЫХ: MS SQL 2008 R2

STARAMOUNT1 = STAR score < 1.4

STARAMOUNT2 = STAR score BETWEEN 1.5 AND 2.4

STARAMOUNT3 = STAR score BETWEEN 2.5 AND 3.4

STARAMOUNT4 = STAR score BETWEEN 3.5 AND 4.4

STARAMOUNT5 = STAR score BETWEEN 4.5 AND 5.0

Исходный SQL, который даетсреднее число звездочек на пользователя равно:

    SELECT Cast(Cast(Round(AVG(Cast(b.stars AS Float)),1)
 AS Numeric(25,1)) AS VarChar(25)) AS 'Stars' 
    FROM score b
        JOIN game_users a ON a.id = b.game_users_id
        GROUP BY a.username, a.current_state    

Затем мне нужно подсчитать в приведенных выше критериях количество пользователей с таким средним количеством звездочек

Может ли кто-нибудь мне помочьна этом?: -)

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

Стиг: -)

Ответы [ 2 ]

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

Это должно быть сделано, хотя я изменил часть вашего исходного запроса, чтобы соответствовать тому, что вы спрашивали:

;WITH UserStars AS
(
    SELECT a.username, ROUND(AVG(CAST(b.stars AS FLOAT)),1) Stars
    FROM score b
    JOIN game_users a ON a.id = b.game_users_id
    GROUP BY a.username
)
SELECT  CASE WHEN Stars < 1.4 THEN 'StarAmount1'
        WHEN Stars BETWEEN 1.4 AND 2.4 THEN 'StarAmount2'
        WHEN Stars BETWEEN 2.4 AND 3.4 THEN 'StarAmount3'
        WHEN Stars BETWEEN 3.4 AND 4.4 THEN 'StarAmount4'
        WHEN Stars BETWEEN 4.4 AND 5.0 THEN 'StarAmount5' ELSE 'AnotherStarAmount' END StarAmount,
        COUNT(*) Users
FROM UserStars
GROUP BY CASE WHEN Stars < 1.4 THEN 'StarAmount1'
         WHEN Stars BETWEEN 1.4 AND 2.4 THEN 'StarAmount2'
         WHEN Stars BETWEEN 2.4 AND 3.4 THEN 'StarAmount3'
         WHEN Stars BETWEEN 3.4 AND 4.4 THEN 'StarAmount4'
         WHEN Stars BETWEEN 4.4 AND 5.0 THEN 'StarAmount5' ELSE 'AnotherStarAmount' END
0 голосов
/ 07 февраля 2012

Вот один способ, есть, конечно, другие.

SELECT
    u.username, u.current_state,
    STARAMOUNT1 = SUM(CASE WHEN s.score < 1.4 THEN 1 ELSE 0 END),
    STARAMOUNT2 = SUM(CASE WHEN s.score BETWEEN 1.5 AND 2.4 THEN 1 ELSE 0 END),
    STARAMOUNT3 = SUM(CASE WHEN s.score BETWEEN 2.5 AND 3.4 THEN 1 ELSE 0 END),
    STARAMOUNT4 = SUM(CASE WHEN s.score BETWEEN 3.5 AND 4.4 THEN 1 ELSE 0 END),
    STARAMOUNT5 = SUM(CASE WHEN s.score > 4.5 THEN 1 ELSE 0 END)
FROM dbo.score AS s
INNER JOIN dbo.game_users AS u
ON u.id = s.game_users_id
GROUP BY u.username, u.current_state;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...