SQL - حيث AGGREGATE> 1
سؤال
وتخيل لدي جدول ديسيبل من العملاء التي تحتوي على {الهوية، واسم المستخدم، الإسم، اللقب}
إذا أريد لمعرفة عدد الحالات هناك من 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
لا تنتمي إلى StackOverflow