إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

WHAT'S WRONG ?


6 رد (ردود) على هذا الموضوع

#1 ELMUBARAK

ELMUBARAK

    عضو

  • الأعضــاء
  • 11 مشاركة

تاريخ المشاركة 14 February 2004 - 12:24 AM

بسم الله الرحمن الرحيم


السلام عليكم ورحمة الله وبركاته،،

I JUST WANNA KNOW WHAT'S WRONG WITH THIS STATMENT
SELECT MIN(AVG(SAL)), JOB
FROM EMP
GROUP BY JOB;

#2 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 14 February 2004 - 01:22 AM

السلام عليكم
المشكلة الموجودة هنا اخي انك تحاول عرض نتيجة واحة وهي اصغر قيمة لمتوسط المرتبات مع اكتر من وظيفة
بمعني انك اذا حذفت job من السيليكت ستعمل
عموما اذا كنت تريد ان تعرض ديتيلز مع group function
فيجب استعمال subquery ف ي الfrom clause
و هذا كود مثال مع شرجه
select  job,tab.a
from emp,(select min(avg(sal)) a
from emp group by job )tab

في السيليكت نختار الjob lu column tab.a
tab هو اسم الsubqueryفي الfrom
و نختار في الsub_queryما نريد من جروب
و بالتوفيق ان شاء الله

#3 John

John

    عضو نشط

  • الأعضــاء
  • 387 مشاركة

تاريخ المشاركة 14 February 2004 - 01:41 AM

شكرا للأفادة أخ Hanon_OCP
فعلا انا استفاد من خبراتك
و الجميع ينتظر المزيد
Johnwahba2002@hotmail.com

#4 khaled

khaled

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 251 مشاركة

تاريخ المشاركة 14 February 2004 - 10:06 AM

شكراً لك اخي hanon_ocp على الطريقة
ولكن عندما نفذت الـquery الذي عملته اعطاني النتيجة الاتية .

CLERK 1037.5
SALESMAN 1037.5
SALESMAN 1037.5
MANAGER 1037.5
SALESMAN 1037.5
MANAGER 1037.5
MANAGER 1037.5
ANALYST 1037.5
PRESIDENT 1037.5
SALESMAN 1037.5
CLERK 1037.5
CLERK 1037.5
ANALYST 1037.5
CLERK 1037.5
لذلك قمت بتعديل الـquery بنفس الفكره التي وضعتها اخي hanon والتي تعتمد على الـ subquery حتى يعطينا نتيجة واحده فقط بدلاً من ان يعطي نفس النتيجه ويكررها 14 مره لك الـ job
وهو كالاتي
select * 
from (select job , avg(sal) avg_sal from emp group by job)
where avg_sal= (select min(avg(sal)) min_sal from emp group by job)
الناتج كالاتي
CLERK 1037.5

متظرين المزيد من الاخوه
خالد مبارك العوبثاني
اليمن-حضرموت
Email :Aboanter84@hotmail.com

#5 ELMUBARAK

ELMUBARAK

    عضو

  • الأعضــاء
  • 11 مشاركة

تاريخ المشاركة 15 February 2004 - 12:41 AM

انا أعرف الحل

SELECT JOB , AVG(SAL)
FROM EMP
GROUP BY JOB
HAVING AVG(SAL) = ( SELECT MIN(AVG(SAL))
FROM EMP
GROUP BY JOB );
و لكن ما العيب في استخدام الجملة SELECT MIN(AVG(SAL)), JOB
FROM EMP
GROUP BY JOB هذا ما أريد انا اعرفه ؟

#6 khaled

khaled

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 251 مشاركة

تاريخ المشاركة 15 February 2004 - 10:29 AM

اخي Elmubarak
الطريقة الصيحة هي كالاتي :
select min(avg(sal)) from emp
group by job

في حالة الحاجه لاظهار الJob اعمل الاتي :
select min(avg(sal)) , min(job) from emp
group by job

بالنسبه للعيب في الـSql الخاصه بك
SELECT MIN(AVG(SAL)), JOB
FROM EMP
GROUP BY JOB;

هو انك تحاول ان تقوم بعمل group مرتين واحده للفنكشن Avg والثانية للفنكشن min وفي المقابل انت تحاول
انت تظهر الـjob في الQuery
وتنفيذ الـselect المنطقي هو
1- يعمل تجميع او grouping لمتوسط الراتب حسب الـjob فيصبح الناتج كالاتي
ANALYST 3000
CLERK 1037.5
MANAGER 2758.33333333333
PRESIDENT 5000
SALESMAN 1400
وهنا اصبح لدينا 5 سجلات بدلاً ان كان معنا 14 سجل
2- في المرحله الثانية يحاول ان يحصل على الـmin من الخمسه السجلات بينما الـgroup مازال على عمود الـjob الموجود في الجدول الذي يحوي 14 سجل وهذا يسسب الخطى .
خالد مبارك العوبثاني
اليمن-حضرموت
Email :Aboanter84@hotmail.com

#7 nobani

nobani

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 08 March 2004 - 02:06 PM

Sorry, logically this request is not correct (not logical), but if you want to display the lowest average salary per job you should use the following code, this code will show if exist more than one job with the same lowest average salary.

[/sql]select min(avg_sal), job
from (
select avg(sal) avg_sal , job
from emp
group by job
)
group by job
/
و قل ربي زدني علما