SQL Case Study
Format for Germany
SELECT
-- Cast PickupDate as a date and display as a German date
FORMAT(CAST(PickupDate AS date), 'd', 'de-de') AS 'PickupDate',
Zone.Borough,
-- Display TotalDistance in the German format
FORMAT(SUM(TripDistance), 'n', 'de-de') AS 'TotalDistance',
-- Display TotalRideTime in the German format
FORMAT(SUM(DATEDIFF(minute, PickupDate, DropoffDate)), 'n', 'de-de') AS 'TotalRideTime',
-- Display TotalFare in German currency
TotalRideTime(SUM(TotalAmount), 'c', 'de-de') AS 'TotalFare'
FROM YellowTripData
INNER JOIN TaxiZoneLookup AS Zone
ON PULocationID = Zone.LocationID
GROUP BY
CAST(PickupDate as date),
Zone.Borough
ORDER BY
CAST(PickupDate as date),
Zone.Borough;
NYC Borough statistics SP
It's time to apply what that you have learned in this course and write a stored procedure to solve the first objective of the Taxi Ride business case. Calculate AvgFarePerKM, RideCount and TotalRideMin for each NYC borough and weekday. After discussion with stakeholders, you should omit records where the TripDistance is zero
CREATE OR ALTER PROCEDURE dbo.cuspBoroughRideStats
AS
BEGIN
SELECT
-- Calculate the pickup weekday
DATENAME(weekday, PickupDate) AS 'Weekday',
-- Select the Borough
Zone.Borough AS 'PickupBorough',
-- Display AvgFarePerKM as German currency
FORMAT(AVG(dbo.ConvertDollar(TotalAmount, .88)/dbo.ConvertMiletoKM(TripDistance)), 'c', 'de-de') AS 'AvgFarePerKM',
-- Display RideCount in the German format
FORMAT(COUNT(ID), 'n', 'de-de') AS 'RideCount',
-- Display TotalRideMin in the German format
FORMAT(SUM(DATEDIFF(SECOND, PickupDate, DropOffDate))/60, 'n', 'de-de') AS 'TotalRideMin'
FROM YellowTripData
INNER JOIN TaxiZoneLookup AS Zone
ON PULocationID = Zone.LocationID
-- Only include records where TripDistance is greater than 0
WHERE TripDistance > 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;
Execution of the Above Procedure
-- Create SPResults
DECLARE @SPResults TABLE(
-- Create Weekday
Weekday nvarchar(30),
-- Create Borough
Borough nvarchar(30),
-- Create AvgFarePerKM
AvgFarePerKM nvarchar(30),
-- Create RideCount
RideCount nvarchar(30),
-- Create TotalRideMin
TotalRideMin nvarchar(30))
-- Insert the results into @SPResults
INSERT INTO @SPResults
-- Execute the SP
EXEC dbo.cuspBoroughRideStats
-- Select all the records from @SPresults
SELECT *
FROM @SPresults;
Comments
Post a Comment