مشکل در شمردن رکورد ها با استفاده از group by
سلام
به عنوان مثال اگر ۲ جدول به صورت زیر داشته باشیم :
۱ - branches
NAME |
HASH |
ID |
علمی |
1 |
1 |
داستانی |
2 |
2 |
رمان |
3 |
3 |
۲ - files
BRANCH |
ID |
2 |
1 |
2 |
2 |
2 |
3 |
1 |
4 |
1 |
5 |
فرض کنید جدول اول یک سری دسته بندی رو نشون میده با HASH یکتا
جدول دوم هم اطلاعات مربوط به فایل ها رو ذخیره کرده . در جدول دوم یک ستون داریم به نام BRANCH که HASH مربوط به دسته مورد نظر رو داخل خودش داره و نشون میده این فایل داخل کدام دسته بندی قرار می گیره.
کاری که من میخام انجام بدم اینه که در یک کوئری رکورد های جدول branches (جدول اول) رو انتخاب کنم و تعداد فایل هایی که در هر دسته بندی قرار میگیرند رو داشته باشم.
حالا از کوئری زیر برای این کار استفاده میکنم :
کد HTML:
select branches.*,count(files.id) as numbers from branches,files where branches.HASH = files.BRANCH group by files.BRANCH order by id desc
نتایج درست بدست میاد اما یک مشکلی که هست رکورد هایی که مقدار count اونها صفر میشه برنمیگرده و حذف میشه ینی به جای اینکه نتایج زیر بدست بیاد :
NUMBERS |
NAME |
HASH |
ID |
2 |
علمی |
1 |
1 |
3 |
داستانی |
2 |
2 |
0 |
رمان |
3 |
3 |
این بدست میاد :
NUMBERS |
NAME |
HASH |
ID |
2 |
علمی |
1 |
1 |
3 |
داستانی |
2 |
2 |
من میخام اون رکوردی که تعدادش صفر هست رو هم بدست بیارم
ممنون میشم کمک کنید
نقل قول: مشکل در شمردن رکورد ها با استفاده از group by
فکر کنم شما یک Query مثل این مورد نیاز دارید:
SELECT b.ID, b.Hash, b.Name, COALESCE(dtF.cnt, 0) AS NUMBERS
FROM branches b
LEFT JOIN
(SELECT BRANCH, COUNT(BRANCH) AS cnt
FROM files f
GROUP BY BRANCH) dtF
ON b.Hash = dtf.BRANCH;