SQL-запрос, используя COUNT и AVERAGES MS SQL Server Management Studio - PullRequest
1 голос
/ 07 июня 2011

Я довольно новичок в SQL, мне нужна помощь по этому запросу, пожалуйста.Вот мой сценарий до сих пор.Дайте мне знать, если вам нужна дополнительная информация,

SELECT DISTINCT EstimName_String AS Inspector, InspectionProcedureName AS [Inspection         Procedure Name], COUNT(*) AS InspectionsDone
FROM         UnitData_Vehicle
WHERE     (InspectionProcedureName LIKE '%Inspection%')
where datediff(day, phodat_datetime, getdate()) >= 1
and datediff(day, phodat_datetime, getdate()) <= 4
GROUP BY InspectionProcedureName, EstimName_String
ORDER BY Inspector

Но я бы хотел увидеть это, пожалуйста.Всего и в среднем за день для каждого инспектора, так что Джо Блоггс провел в общей сложности 99 проверок, а затем усредняет общее количество по определенному количеству дней, т.е. это стоит 4 дня или проверка.возможный?

Inspector   Inspection Procedure Name   Inspections done    Total   Avg per Day
Joe Bloggs  Inspection                        16            99.00   24.75
Joe Bloggs  Inspection                        1     
Joe Bloggs  Inspection                        4     
Joe Bloggs  Inspection                        78        
Jack sprat  Inspection                        14            87.00    21.75
Jack sprat  Inspection                        73        
Humpty Dumpty   Inspection                    7             75.00    18.75
Humpty Dumpty   Inspection                    68        
Micky Mouse Inspection                        13            80.00     20
Micky Mouse Inspection                        67        
Jack Jill   Inspection                        11            76.00     19
Jack Jill   Inspection                        1     
Jack Jill   Inspection                        64        

Ответы [ 2 ]

0 голосов
/ 07 июня 2011
SELECT EstimName_String AS Inspector, 
InspectionProcedureName AS [Inspection Procedure Name], 
sum(InspectionsDone) AS Total, 
cast(sum(InspectionsDone) as float)/count(*) as [Avg Per Day]
FROM         UnitData_Vehicle
GROUP BY InspectionProcedureName, EstimName_String
0 голосов
/ 07 июня 2011

Во-первых, внутренний «предварительный запрос» будет получать количество в день ... ТОГДА используйте ТО в качестве основы для получения общего SUM () и AVG (). Это вернет одну строку для каждого инспектора, а НЕ все отдельные дни, указанные в вашей разбивке.

select 
      InspectionProcedureName AS [Inspection         Procedure Name], 
      EstimName_String AS Inspector, 
      sum( InspectionsDone ) as InspectionsDone,
      avg( InspectionsDone ) as AvgInspections
   from 
      ( SELECT 
            InspectionProcedureName, 
            EstimName_String AS Inspector, 
            datediff(day, phodat_datetime, getdate()) as ByDate,
            COUNT(*) AS InspectionsDone
         FROM
            UnitData_Vehicle
         WHERE     
                InspectionProcedureName LIKE '%Inspection%'
            AND datediff(day, phodat_datetime, getdate()) >= 1
            and datediff(day, phodat_datetime, getdate()) <= 4
         GROUP BY 
            InspectionProcedureName, 
            EstimName_String,
            datediff(day, phodat_datetime, getdate()) ) PreQuery
   ORDER BY 
      Inspector

Если вы действительно хотите, чтобы инспектор проводил каждую отдельную строку в день, вам нужно было бы добавить другую магию, чтобы присоединиться к тому же ВНУТРЕННЕМУ «PreQuery», чтобы получить индивидуальный день, и настоящую магию, чтобы показать только общее и среднее значение за первый ряд на инспектора.

...