كيفية ترتيب النتائج بحسب العرف نعول مع كيو؟
-
05-07-2019 - |
سؤال
ولدي جدولين:
وشركات: (الهوية، والاسم)
والعمال: (معرف والاسم والبلد)
وأود أن تحصل على جميع الشركات وفرزها حسب أعداد الموظفين من بلد معين.
لاستعلام نبحث عن الشركات التي لديها المزيد من العمال من الولايات المتحدة الأمريكية، ينبغي أن تعطي نتيجة:
#workers from USA | company id | company name
----------------------------------------------
90 6 foo corp
45 9 bar corp
0 3 foobar corp
وحاولت:
select
count(w.country='USA') as mycount,
w.company_id,
c.company_name
from
companies c
left join workers w on
c.id=w.company_id
group by
w.company_id,
c.company_name
order by mycount desc;
ولكن هذا عد جميع العاملين بغض النظر عن بلدانهم.
وأي أفكار؟
المحلول
ويمكنك القيام بذلك بسهولة مع فرعي مترابط:
SELECT
(SELECT count(*) FROM workers w WHERE w.company_id=c.id AND w.country='USA') AS mycount,
c.id,
c.company_name
FROM
companies c
ORDER BY mycount DESC
نصائح أخرى
هل استبدال COUNT (w.country = 'USA') مع COUNT (*) مساعدة؟ أعتقد يحتاج طلبك للإشارة إلى الحقول الموجودة في الجدول الشركات بدلا من العمال بسبب يسارك انضمام يترك الباب مفتوحا أمام إمكانية أن مجموعة من العمال انسحب لشركة معينة / البلد هو مجموعة فارغة.
وجرب:
select count(*) as mycount,
c.company_id,
c.company_name
from companies c
left join workers w on c.id=w.company_id
group by c.company_id, c.company_name
order by mycount desc;
لا تنتمي إلى StackOverflow