Stored procedure thống kê quận NYC
Đến lúc áp dụng những gì bạn đã học trong khóa này để viết một stored procedure giải quyết mục tiêu đầu tiên của bài toán Taxi Ride. Tính AvgFarePerKM, RideCount và TotalRideMin cho từng quận (borough) của NYC theo từng ngày trong tuần. Sau khi thảo luận với các bên liên quan, bạn cần loại bỏ các bản ghi có TripDistance bằng không.
Bài tập này là một phần của khóa học
Viết Hàm và Thủ Tục Lưu Trữ trong SQL Server
Hướng dẫn bài tập
- SELECT và GROUP BY theo ngày đón khách trong tuần và
Borough. - Tính
AvgFarePerKMbằngdbo.ConvertDollar()vàdbo.ConvertMiletoKM()với tỷ giá quy đổi sang Euro là.88. - Hiển thị
AvgFarePerKMdưới dạng tiền tệ tiếng Đức,RideCountvàTotalRideMindưới dạng số theo chuẩn tiếng Đức. - Loại bỏ các bản ghi có
TripDistancelà0.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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;