سؤال

ولدي جدولين:

وشركات: (الهوية، والاسم)

والعمال: (معرف والاسم والبلد)

وأود أن تحصل على جميع الشركات وفرزها حسب أعداد الموظفين من بلد معين.

لاستعلام نبحث عن الشركات التي لديها المزيد من العمال من الولايات المتحدة الأمريكية، ينبغي أن تعطي نتيجة:

#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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top