Хранимая процедура: статистика по районам Нью-Йорка
Пришло время применить знания, полученные в этом курсе, и написать хранимую процедуру для решения первой задачи бизнес-кейса о поездках на такси. Вычислите AvgFarePerKM, RideCount и TotalRideMin для каждого района Нью-Йорка и каждого дня недели. По результатам обсуждения с заинтересованными сторонами записи, в которых значение TripDistance равно нулю, следует исключить.
Это упражнение является частью курса
Написание функций и хранимых процедур в SQL Server
Инструкции к упражнению
- Выберите данные и выполните группировку по дню недели получения заказа и полю
Borough. - Вычислите
AvgFarePerKM, используя функцииdbo.ConvertDollar()иdbo.ConvertMiletoKM()с обменным курсом.88к евро. - Отобразите
AvgFarePerKMв денежном формате для Германии, аRideCountиTotalRideMin— в числовом формате для Германии. - Исключите записи, в которых
TripDistanceравно0.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
CREATE OR ALTER PROCEDURE dbo.cuspBoroughRideStats
AS
BEGIN
SELECT
-- Calculate the pickup weekday
___(weekday, PickupDate) AS 'Weekday',
-- Select the Borough
Zone.Borough AS 'PickupBorough',
-- Display AvgFarePerKM as German currency
___(AVG(dbo.___(TotalAmount, .88)/dbo.___(TripDistance)), '_', 'de-de') AS '___',
-- Display RideCount in the German format
___(COUNT(ID), '_', 'de-de') AS '___',
-- Display TotalRideMin in the German format
___(SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60, '_', 'de-de') AS '___'
FROM YellowTripData
INNER JOIN TaxiZoneLookup AS Zone
ON PULocationID = Zone.LocationID
-- Only include records where TripDistance is greater than 0
___ ___ > ___
-- Group by pickup weekday and Borough
GROUP BY DATENAME(WEEKDAY, PickupDate), Zone.Borough
ORDER BY CASE WHEN DATENAME(WEEKDAY, PickupDate) = 'Monday' THEN 1
WHEN DATENAME(WEEKDAY, PickupDate) = 'Tuesday' THEN 2
WHEN DATENAME(WEEKDAY, PickupDate) = 'Wednesday' THEN 3
WHEN DATENAME(WEEKDAY, PickupDate) = 'Thursday' THEN 4
WHEN DATENAME(WEEKDAY, PickupDate) = 'Friday' THEN 5
WHEN DATENAME(WEEKDAY, PickupDate) = 'Saturday' THEN 6
WHEN DATENAME(WEEKDAY, PickupDate) = 'Sunday' THEN 7 END,
SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60
DESC
END;