Locații de preluare pe tură
E timpul să rezolvi cel de-al doilea obiectiv al studiului de caz. Care sunt AvgFarePerKM, RideCount și TotalRideMin pentru fiecare locație de preluare și tură în cadrul unui cartier din New York?
Acest exercițiu face parte din cursul
Scrierea funcțiilor și a procedurilor stocate în SQL Server
Instrucțiuni pentru exercițiu
- Creează o procedură stocată numită
cuspPickupZoneShiftStatscare acceptă@Borough nvarchar(30)ca parametru de intrare și filtrează înregistrările după valoarea corespunzătoare a câmpuluiBorough. - Calculează
'Shift'(tura) pasând ora dinPickupDatefuncțieidbo.GetShiftNumber(). Folosește funcțiaDATEPARTpentru a extrage doar componentahourdinPickupDate. - Grupează după ziua săptămânii a coloanei
PickupDate, tură șiZone. - Sortează după ziua săptămânii din
PickupDate(începând cu luni), tură șiTotalRideMin.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
-- 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;