2015/08/30، 03:09 AM
برای پیدا کردن مقادیر تکراری یک فیلد در SQL Server باید از تابع COUNT استفاده کنیم
و همزمان از یک شرط هم استفاده کنیم که مقدار تابع COUNT را بررسی کند.
مقدار توابع aggregate رو نمیشه با WHERE بررسی کرد! در عوض میشه از HAVING استفاده کرد.
پیش نیاز این مطلب، آشنایی با GROUP BY و توابع جمع هست.
GROUP BY باعث میشه که از هر فیلدی فقط یک نمونه توی خروجی کوئری نمایش داده بشه.
که تعریف GROUP BY شبیه DISTINCT ـه
ولی بدون استفاده از GROUP BY نمیشه همزمان هم از HAVING و هم از مقدار یک فیلد توی SELECT استفاده کرد.
علاوه بر هدف اصلی که پیدا کردن ردیف های تکراری بود، 2 نکته دیگه هم توی کد بالا هست:
نکته اول: از WHERE استفاده شده تا فقط فیلدهایی بررسی بشن که با حرف «ل» شروع میشن
نکته دوم: نتیجه ی کوئری بر حسب تعداد تکرار مقادیر مرتب شده تا اول مقادیری با میزان تکرار کمتر نمایش داده بشن و سپس مقادیری که تکرار اونا بیشتر بوده.
ترتیب استفاده از WHERE, GROUP BY, ORDER BY اجباری است و باید رعایت بشه.
توی WHERE فقط از فیلدهای SELECT شده، به غیر از توابع جمعی (aggreegate) میشه استفاده کرد.
توی HAVING فقط از توابع جمعی (aggreegate) میشه استفاده کرد.
و همزمان از یک شرط هم استفاده کنیم که مقدار تابع COUNT را بررسی کند.
مقدار توابع aggregate رو نمیشه با WHERE بررسی کرد! در عوض میشه از HAVING استفاده کرد.
پیش نیاز این مطلب، آشنایی با GROUP BY و توابع جمع هست.
GROUP BY باعث میشه که از هر فیلدی فقط یک نمونه توی خروجی کوئری نمایش داده بشه.
که تعریف GROUP BY شبیه DISTINCT ـه
ولی بدون استفاده از GROUP BY نمیشه همزمان هم از HAVING و هم از مقدار یک فیلد توی SELECT استفاده کرد.
کد php:
use myDB
GO
SELECT myField, COUNT(myField) AS cnt
FROM myTable
WHERE myField LIKE 'ل%'
GROUP BY myField
HAVING COUNT(myField) > 1
ORDER BY cnt
علاوه بر هدف اصلی که پیدا کردن ردیف های تکراری بود، 2 نکته دیگه هم توی کد بالا هست:
نکته اول: از WHERE استفاده شده تا فقط فیلدهایی بررسی بشن که با حرف «ل» شروع میشن
نکته دوم: نتیجه ی کوئری بر حسب تعداد تکرار مقادیر مرتب شده تا اول مقادیری با میزان تکرار کمتر نمایش داده بشن و سپس مقادیری که تکرار اونا بیشتر بوده.
ترتیب استفاده از WHERE, GROUP BY, ORDER BY اجباری است و باید رعایت بشه.
توی WHERE فقط از فیلدهای SELECT شده، به غیر از توابع جمعی (aggreegate) میشه استفاده کرد.
توی HAVING فقط از توابع جمعی (aggreegate) میشه استفاده کرد.