Почему эти совокупные суммы отличаются? - PullRequest
1 голос
/ 17 мая 2011

У меня есть таблица, которая выглядит следующим образом:

CREATE TABLE [dbo].[StudentTime]
([StudentTimeID] [int] NOT NULL IDENTITY(164352, 1),
 [StudentID] [int] NOT NULL,
 --Some columns...
 [EntryDateTime] [datetime] NOT NULL,
 [Hours] [decimal] (6, 2) NOT NULL CONSTRAINT [DF_StudentTime_Hours] DEFAULT ((0))
 --Some more columns
 )

Когда я запрашиваю ее

SELECT COUNT(DISTINCT StudentID) AS StudentCount,
SUM(HOURS) AS TotalHours
FROM dbo.StudentTime
WHERE EntryDateTime >= '5/1/2010'
AND EntryDateTime < '5/1/2011'

, я получаю такой результат:

StudentCount: 9890
TotalHours: 775645.5

Теперь яхочу отфильтровать студентов из подсчета, которые по какой-либо причине накопили 0 часов за отчетный период:

SELECT COUNT(DISTINCT StudentID) AS StudentCount,
SUM(HOURS) AS TotalHours
FROM dbo.StudentTime
WHERE EntryDateTime >= '5/1/2010'
AND EntryDateTime < '5/1/2011'
AND Hours > 0

Я получаю такой результат:

StudentCount: 9792 --Expected to be smaller.
TotalHours: 775699.25 --Expected to be same, but is larger?!?!

Это потому, что яесть AND Hours > 0 (INT) против AND Hours > 0.0 (ДЕСЯТИЧНЫЙ)?Когда я делаю это, где утверждение, происходит ли неявный CAST?

Ответы [ 3 ]

3 голосов
/ 17 мая 2011

Если сумма больше, когда вы исключаете определенные записи, вы должны исключать отрицательные числа.

Имейте в виду, что их сумма [1, -1, 2] равна 2, поскольку 1 + (-1) + 2 == 1 - 1 + 2.

Как вы указали, если дата окончания и дата начала неверны, вы также можете исключить записи, которые вы намеревались включить.Это также может привести к большей или меньшей сумме, чем ожидалось.

3 голосов
/ 17 мая 2011

У вас должно быть несколько отрицательных часов.

1 голос
/ 17 мая 2011

Вы работаете с живыми данными? Даже если есть ученики с отрицательными часами, при добавлении еще одного условия (число часов> 0)

число отдельных учеников должно было уменьшиться

ОК, я упал на ваш комментарий вместо данных. Второй результат меньше первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...