کاربرد تابع DATEDIFF در Query نویسی - قسمت چهارم (آخر)
شنبه 7 آذر 1394در این مقاله با یک دیتابیس کوچک اما با پتانسیل، برای نوشتن Query آشنا میشویم
در ادامه قسمت سوم این مقاله در این جلسه با Query های زیر و نکات آن آشنا شده
Query دهم :
هر خانومی چند اتفاق در زندگی خود داشته است ؟ (فرزندان - ازدواج - طلاق - فوت همسر و فرزند)
در این مثال که تشکیل شده از چندین Query میتوان به قسمت های مختلفی تجزیه شود
تعداد فرزندان با یک Query ساده که از Group By و تابع Count استفاده میکند به دست میاد .
برای قسمت های دیگر هم به همین شکل است . پس ما چندین Query با فرمت های مشابه داریم
که در ادامه آن را مشاهده میکنید .
SELECT CurrentWoman.FirstName + ' ' + CurrentWoman.LastName AS Woman , ISNULL(Marriages, 0) AS Marriages , ISNULL(Divorces, 0) AS Divorces , ISNULL(Children, 0) AS Children , ISNULL(HusbandDeaths, 0) AS HusbandDeaths , ISNULL(ChildDeaths, 0) AS ChildDeaths , ISNULL(Marriages, 0) + ISNULL(Divorces, 0) + ISNULL(Children, 0) + ISNULL(HusbandDeaths, 0) + ISNULL(ChildDeaths, 0) AS TotalLifeEvents FROM Person CurrentWoman -----------------------Marriages-------------------------------- LEFT OUTER JOIN ( SELECT WifeID , COUNT(*) AS Marriages FROM Marriage GROUP BY WifeID ) M ON CurrentWoman.PersonID = M.WifeID -----------------------Children-------------------------------- LEFT OUTER JOIN ( SELECT MotherID , COUNT(*) AS Children FROM Person WHERE MotherID IS NOT NULL GROUP BY MotherID ) C ON CurrentWoman.PersonID = C.MotherID -----------------------Divorces-------------------------------- LEFT OUTER JOIN ( SELECT WifeID , COUNT(*) AS Divorces FROM Marriage WHERE DateOfDivorce IS NOT NULL GROUP BY WifeID ) D ON CurrentWoman.PersonID = D.WifeID -----------------------ChildDeaths-------------------------------- LEFT OUTER JOIN ( SELECT Child.MotherID , COUNT(*) AS ChildDeaths FROM Person Child INNER JOIN Person M ON Child.MotherID = M.PersonID AND Child.DateOfDeath < M.DateOfDeath GROUP BY Child.MotherID ) CD ON CurrentWoman.MotherID = CD.MotherID -----------------------HusbandDeaths-------------------------------- LEFT OUTER JOIN ( SELECT Person.PersonID , COUNT(*) AS HusbandDeaths FROM Person INNER JOIN Marriage ON Person.PersonID = Marriage.WifeID INNER JOIN Person H ON Marriage.HusbandID = H.PersonID AND H.DateOfDeath < Person.DateOfDeath GROUP BY Person.PersonID ) HD ON CurrentWoman.PersonID = HD.PersonID ------------------------------------------------------------------- WHERE CurrentWoman.Gender = 'F' ORDER BY TotalLifeEvents DESC;
و اینجا نیز از تابع ISNULL که در جلسات قبل توضیح داده شد استفاده شده است
SELECT Person.FirstName + ' ' + Person.LastName AS Patriarch FROM Person WHERE Person.Gender = 'M' AND Person.MotherID IS NULL AND Person.FatherID IS NULL AND PersonID NOT IN ( SELECT Person.PersonID FROM Person INNER JOIN Marriage ON Person.PersonID = Marriage.HusbandID INNER JOIN Person Wife ON Marriage.WifeID = Wife.PersonID WHERE Wife.MotherID IS NOT NULL OR Wife.FatherID IS NOT NULL );
امیدوارم با این مواردی که در این چند جلسه ی کوتاه عنوان شد تونسته باشم تا حدی توانایی شما دوستان رو در نوشتن Query ها افزایش داده باشم .
نکته : مطمئنا این مثال ها همه ی مثال هایی نبود که میشد نوشت و شما هم میتونید مثال های خودتون رو تعریف کنید و Query شو بنویسید.
موفق باشید
سروش صدر
- SQL Server
- 2k بازدید
- 4 تشکر