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

الاستعلام عن عمود ليس من ضمن ال Group


-=|mOOdY|=-

Recommended Posts

كما عودناكم هناك دائما الجديد ,, ومع مودي مش هتقدر تغمض عينيك :huh: :huh: :o

هناك سؤال تقليدي من قبل الزبائن وهو
"اريد اظهار اقل راتب لكل دائرة" :rolleyes: والذي ببساطة يمكن حله كما يلي

SQL> select deptno, min(sal)
 2  from emp
 3  group by deptno;


ولكن بتعرفو الطلبات ما بتخلص :blink: بيرجع بيطلب كمان شغلة
"بدي اعرف رقم الموظف صاحب اقل راتب في كل دائرة" :) :) بيطلب كثير اشياء :o
فتقوم بتعديل الجملة لكي تصبح

SQL> select deptno, empno, min(sal)
 2  from emp
 3  group by deptno;


لكن للأسف يظهر معك الخطأ التالي

ORA-00979: not a GROUP BY expression


كنا زمان نحل هذه المشكلة باستعمال sub-select او انشاء inline-view
ولكن هناك طريقة ظريفة اكتشفتها بالامس منذ 9i وهي موجودة

SQL> select deptno, min(sal), min(empno) 
 2	KEEP ( dense_rank FIRST order by sal) empno
 3  from emp
 4  group by deptno
 5  /

DEPTNO   MIN(SAL)	  EMPNO
---------- ---------- ----------
	10	   1300	   7934
	20		800	   7369
	30		950	   7900


ركزو على

KEEP ( dense_rank FIRST order by sal)



وعدم استعمالنا لا sub-select ولا inline-view


تحياتي :blink:




تم إضافة الكود في ملف نصي بالمرفقات
إدارة المنتدى

keep.txt

رابط هذا التعليق
شارك

السلام عليكم

شكر جدا جدا ياحلى والذ واطعم صديق قابلتة على المنتدى

دايما سابقنا بحاجاتك الطعمة دى

الامر keep

موجود بس على 9 اى فما فوفقة

عشان بس محدش يقول الجملة غلط ومشتغلتشى معانا

رابط هذا التعليق
شارك

  • بعد 5 أسابيع...
  • بعد 2 أسابيع...

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية