Điểm đón theo ca làm việc
Đến lúc giải mục tiêu thứ hai của bài toán kinh doanh. AvgFarePerKM, RideCount và TotalRideMin cho từng điểm đón và từng ca làm việc trong mỗi quận (Borough) của NYC là bao nhiêu?
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
- Tạo một stored procedure tên
cuspPickupZoneShiftStatsnhận tham số đầu vào@Borough nvarchar(30)và chỉ lấy các bản ghi có giá trịBoroughkhớp. - Tính
'Shift'bằng cách truyềnhourcủaPickupDatevào hàmdbo.GetShiftNumber(). Dùng hàmDATEPARTđể chỉ lấy phầnhourcủaPickupDate. - GROUP BY ngày trong tuần của
PickupDate, ca làm việc (shift), và Zone. - Sắp xếp theo ngày trong tuần của
PickupDate(thứ Hai trước), theo ca làm việc (shift), và theoTotalRideMin.
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 the stored procedure
CREATE PROCEDURE dbo.cuspPickupZoneShiftStats
-- Specify @Borough parameter
@Borough nvarchar(30)
AS
BEGIN
SELECT
DATENAME(WEEKDAY, PickupDate) as 'Weekday',
-- Calculate the shift number
___.___(___(___, ___)) as 'Shift',
Zone.Zone as 'Zone',
FORMAT(AVG(dbo.ConvertDollar(TotalAmount, .77)/dbo.ConvertMiletoKM(TripDistance)), 'c', 'de-de') AS 'AvgFarePerKM',
FORMAT(COUNT (ID),'n', 'de-de') as 'RideCount',
FORMAT(SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60, 'n', 'de-de') as 'TotalRideMin'
FROM YellowTripData
INNER JOIN TaxiZoneLookup as Zone on PULocationID = Zone.LocationID
WHERE
dbo.ConvertMiletoKM(TripDistance) > 0 AND
Zone.Borough = @Borough
GROUP BY
DATENAME(WEEKDAY, PickupDate),
-- Group by shift
___.___(___(___, ___)),
Zone.Zone
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,
-- Order by shift
___.___(___(___, ___)),
SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60 DESC
END;