سؤال

وتخيل لدي جدول ديسيبل من العملاء التي تحتوي على {الهوية، واسم المستخدم، الإسم، اللقب}

إذا أريد لمعرفة عدد الحالات هناك من firstnames مختلفة يمكنني القيام به:

select firstname,count(*) from Customers group by 2 order by 1;

   username | count(*)
   ===================
   bob      |   1
   jeff     |   2
   adam     |   5

وكيف أكتب نفس الاستعلام للعودة فقط firstnames التي تحدث أكثر من مرة؟ أي في المثال أعلاه فقط العودة الصفوف لجيف وآدم.

هل كانت مفيدة؟

المحلول

وأنت تريد شرط having، كما يلي:

select 
    firstname,
    count(*) 
from Customers 
group by firstname
having count(*) > 1
order by 1

نصائح أخرى

وgroup by 2 order by 1 أمر فظيع، أود أن أقول. استخدام أسماء الأعمدة المناسبة إذا كان هذا المدعومة:. هذا سيحسن بشكل كبير القراءة

ومع أخذ ذلك في الاعتبار،

select firstname, count(*) c 
from Customers 
group by firstname  
having count(*) > 1 -- Kudos to Shannon
order by c;

وهذا ما يفعله جملة HAVING. لست متأكدا اذا كان هذا العمل في ينفورميكس، لكنها لا تقدم له رصاصة:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top