2013-05-28 2 views
0

내 문제는 다음과 같습니다. 다른 사용자의 게임과 게임 점수를 합친 MS SQL 쿼리가 있고 두 부분 계산에서 집계 함수를 사용하여 종합 점수. 어떤 이유로 계산의 한 부분 (계산의 첫 번째 부분 - 게임 한 게임)이 전체 점수에서 사용되지 않고 있습니다 (저는 이것을 Algoscore라고 부릅니다). 쿼리는 다음과 같습니다 :SQL 쿼리 문제 : 쿼리의 일부분에 영향을 미치지 않음

SELECT TOP 10 
    COUNT(TourScore.TourScoreID) AS GameCount, 
    AVG(GameScore.GameScore) AS AVGScore, 
    Users.UserID, Users.DisplayName, 
    (((COUNT(TourScore.TourScoreID)/750) * .50) * 100) 
    + (((AVG(GameScore.GameScore)/14695) * .50) * 100) AS Algoscore 
FROM TourScore INNER JOIN GameScore 
    ON TourScore.GameScoreID = GameScore.GameScoreID 
    INNER JOIN Users 
    ON GameScore.UserID = Users.UserID 
WHERE (GameScore.ScoreDate BETWEEN '01/01/2013' AND '06/01/2013') 
GROUP BY Users.UserID, Users.DisplayName 
ORDER BY Algoscore DESC 

은 SELECT의 계산 부분 :
(((COUNT(TourScore.TourScoreID)/750) * .50) * 100) + (((AVG(GameScore.GameScore)/14695) * .50) * 100) AS Algoscore
기본적 계산의 첫 번째 부분 무시 : 두 번째 부분은 잘 계산하는 (((COUNT(TourScore.TourScoreID)/750) * .50) * 100)

나는를 실행하므로 쿼리의 경우 Algoscore은 방정식의 두 번째 부분 일 뿐이며 방정식의 첫 번째와 두 번째 부분은 결합되어 있지 않습니다.

나는 이것이 의미가 있기를 바랍니다. 이것에 대한 조언? 다른 값을 얻기 위해 집계 함수가있는 방정식을 사용하여 이와 같은 쿼리를 실행할 수 있습니까?

+0

당신이 어떻게 첫 번째 부분을 무시에 정교한 수 있습니까? 0을 반환한다는 의미입니까? – Gramma2005

+0

'TourScore.TourScoreID' 또는 GameScore.GameScore' nullable 필드입니까? –

+0

Algoscore 계산시 첫 번째 부분 만 사용하지 않습니다. 기본적으로 방정식의 두 번째 부분 만 사용합니다. (((AVG (GameScore.GameScore)/14695) * .50) * 100) Algoscore를 계산하고 첫 번째 부분을 전혀 사용하지 않습니다 (완전히 무시하고 있음). (((COUNT (TourScore.TourScoreID)/750) * .50) * 100). – thenextmogul

답변

5

COUNT(ColumnName)은 항상 정수를 반환합니다. 정수를 다른 정수로 나눌 때 결과는 항상 정수입니다. 쿼리 창에서이 작업을 실행하면

예를 들어, :

Select 5/10 

당신은 아마 결과 0.5 기대합니다. 대신 정수 계산 때문에 0이됩니다. 나는 당신이 당신의 코드에 작은 변화를 줄 것을 제안 할 것이다.

변경이 : 여기에

COUNT(TourScore.TourScoreID)/750 

:

COUNT(TourScore.TourScoreID)/750.0 
+0

그게 고정! 와우, 그런 사소한 일이 어떻게 막대한 문제를 일으킬 수 있는지는 놀랍습니다. 고마워요! – thenextmogul

관련 문제