เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

จุดรับผู้โดยสารตามกะการทำงาน

ถึงเวลาแก้โจทย์ข้อที่สองของกรณีศึกษาแล้ว — AvgFarePerKM, RideCount และ TotalRideMin ของแต่ละจุดรับผู้โดยสารและกะการทำงานภายใน Borough ของ NYC มีค่าเท่าใด?

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การเขียนฟังก์ชันและ Stored Procedures ใน SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • สร้าง stored procedure ชื่อ cuspPickupZoneShiftStats ที่รับ @Borough nvarchar(30) เป็น input parameter และกรองเฉพาะระเบียนที่มีค่า Borough ตรงกัน
  • คำนวณ 'Shift' โดยส่งค่า hour ของ PickupDate ไปยังฟังก์ชัน dbo.GetShiftNumber() โดยใช้ฟังก์ชัน DATEPART เพื่อดึงเฉพาะส่วน hour ของ PickupDate
  • จัดกลุ่มตามวันในสัปดาห์ของ PickupDate, กะการทำงาน และ Zone
  • เรียงลำดับตามวันในสัปดาห์ของ PickupDate (โดยให้วันจันทร์ขึ้นก่อน), กะการทำงาน และ TotalRideMin

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

-- 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;
แก้ไขและรันโค้ด