Lokasi penjemputan per shift
Saatnya menyelesaikan tujuan kedua dari studi kasus bisnis. Berapa AvgFarePerKM, RideCount, dan TotalRideMin untuk setiap lokasi penjemputan dan shift di dalam wilayah NYC (Borough)?
Latihan ini merupakan bagian dari kursus
Menulis Function dan Stored Procedure di SQL Server
Instruksi latihan
- Buat stored procedure bernama
cuspPickupZoneShiftStatsyang menerima@Borough nvarchar(30)sebagai parameter masukan dan membatasi rekaman berdasarkan nilaiBoroughyang cocok. - Hitung
'Shift'dengan meneruskanhourdariPickupDateke fungsidbo.GetShiftNumber(). Gunakan fungsiDATEPARTuntuk memilih hanya bagianhourdariPickupDate. - Kelompokkan berdasarkan hari dalam minggu
PickupDate, shift, dan Zone. - Urutkan berdasarkan hari dalam minggu
PickupDate(dengan Monday terlebih dahulu), shift, danTotalRideMin.
Latihan interaktif langsung praktik
Cobalah latihan ini dengan melengkapi kode contoh ini.
-- 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;