تقسيم التلاميذ على المهن؟
#1
السلام عليكم

عندي جدولين : جدول الطلبة وجدول المهن كما هو مبين في الرسم أدناه

[صورة مرفقة: 1.png]

ما أريد القيام به وهو تقسيم الطلبة بعد حساب مجموعهم (count(Student.Id على المهن كما هو موضح في الجدول أعلاه-أطباء، أساتذه و مندسين
بحيث من هم أعلى درجة أطباء والأقل منهم أساتذة ... وهكذا

حيث أقوم بجمع عدد الطلبة في الجدول Student وهو 8 كما هو مبين أعلاه وأقوم بمقارنتة بالجدول الثاني Jobs مع العمود Idوعند التساوي أقسم الطلبة بالعدد الموجود في كل مهنة
فلو نظرنا إلى الصورة أعلاه وجدنا عدد الطلبة 8 وقمنا بمقارنته مع الـ Id في الجدول Jobs وعند التساوي مجموع الطلبة(8) = 8 حصلنا على كم عدد الطلبة أطباء وهو 3 و3 أساتذة و2 مهندس
وتكون النتيجة هكذا
بما أن 3طلبة أعلى نقطه هم أطباء:
خالد----------->طبيب
 علي---------->طبيب
محمد---------->طبيب

أساتذة
وليد----------->أستاذ
أشرف--------->أستاذ
معاذ ---------->أستاذ

مهندسين
سامي----------->مهندس
 أحمد---------->مهندس

حاولت كثيرا مع أني مبتدء وأتعلم من النت لم أتمكن من الوصول إلى نتيجة

كود :
SELECT Name FROM Student JOIN Jobs ON Student.Id=Jobs.id WHERE count(Student.Id)=Jobs.id ORDER BY marks
الرد
#2
السؤال غير مفهوم اخي الكريم
الرد
#3
وعليكم السلام و رحمة الله

هل تصميمك بهذا الشكل ؟

STUDENT (STUDENT_ID, STUDENT_NAME, STUDENT_TEST_RESULT )
JOBS ( JOB_ID, JOB_NAME,JOB_COUNT  )

JOB_DECISION (JOB_ID ,STUDENT_ID )
الرد
#4
(04-02-2020, 08:14 AM)bouh25 كتب : السؤال غير مفهوم  اخي الكريم

أظن أن السؤال واضح

أريد تقسيم الطلبة منهم من هو دكتور ومنهم من هو أستاذ ووو

وهذا بحساب مجموع الطلبة لمعرفة كم سيكون هناك طبيب وكم من أستاذ وكم من مهندس

في الصوره فوق كان مجموع الطلبة 8 وبعد مقارنه عدد الطلبة بالـعمود Id في جدول المهن وجد أن 8 تحتوي على 3 أطباء و3 3أساتذة و2 مهندس

فلو كان عدد الطلبة 5 مثلا فيقابل الـ 5 في جدول المهن   2 دكتور 2 أستاذ ومهندس واحد(2-2-1)

ونقوم بإظهار أسماء الطلبة الأطباء وأسماء الطلبة الأساتذة وسماء الطلبة المهندسين

(04-02-2020, 07:44 PM)Lam.Abdeldjalil كتب : وعليكم السلام و رحمة الله

هل تصميمك بهذا الشكل ؟

STUDENT (STUDENT_ID, STUDENT_NAME, STUDENT_TEST_RESULT )
JOBS ( JOB_ID, JOB_NAME,JOB_COUNT  )

JOB_DECISION (JOB_ID ,STUDENT_ID )

عندي جدولين فقط
STUDENT (STUDENT_ID, STUDENT_NAME, STUDENT_DateOfBirth )

JOBS ( JOB_ID, Doctors_JOB,Teachers_JOB,Engineers _JOB  )

(04-02-2020, 07:46 PM)ALG2009 كتب :
(04-02-2020, 08:14 AM)bouh25 كتب : السؤال غير مفهوم  اخي الكريم

أظن أن السؤال واضح

أريد تقسيم الطلبة منهم من هو دكتور ومنهم من هو أستاذ ووو

وهذا بحساب مجموع الطلبة لمعرفة كم سيكون هناك طبيب وكم من أستاذ وكم من مهندس

في الصوره فوق كان مجموع الطلبة 8 وبعد مقارنه عدد الطلبة بالـعمود Id في جدول المهن وجد أن 8 تحتوي على 3 أطباء و3 3أساتذة و2 مهندس

فلو كان عدد الطلبة 5 مثلا فيقابل الـ 5 في جدول المهن   2 دكتور 2 أستاذ ومهندس واحد(2-2-1)

ونقوم بإظهار أسماء الطلبة الأطباء وأسماء الطلبة الأساتذة وسماء الطلبة المهندسين

(04-02-2020, 07:44 PM)Lam.Abdeldjalil كتب : وعليكم السلام و رحمة الله

هل تصميمك بهذا الشكل ؟

STUDENT (STUDENT_ID, STUDENT_NAME, STUDENT_TEST_RESULT )
JOBS ( JOB_ID, JOB_NAME,JOB_COUNT  )

JOB_DECISION (JOB_ID ,STUDENT_ID )

عندي جدولين فقط
STUDENT (STUDENT_ID, [size=small]STUDENT_NAME,Student_Marks,[/size]STUDENT_DateOfBirth )

JOBS ( JOB_ID, Doctors_JOB,Teachers_JOB,Engineers _JOB  )

الجدولين في الصورة يظهرون الأعمدة في الجداول
الرد
#5
عندك مشكل في التصميم /

على كل في الفايربيرد يمكن بالمثال :

كود :
/*doctors*/
select * from
(
select first ((select j.doctor from job j
where j.doctor+j.teacher+j.engineer=( select count(*) from student  ) ))
s.student_name , 'Doctor' job_name
from student s
order by s.student_test_result desc
)
union all
/*teachers*/
select * from
(
select first ((select j.teacher from job j
where j.doctor+j.teacher+j.engineer=( select count(*) from student  ) ))
skip ((select j.doctor from job j
where j.doctor+j.teacher+j.engineer=( select count(*) from student  ) ))
s.student_name , 'Teacher' job_name
from student s
order by s.student_test_result desc
)
union all
/*engineers*/
select * from
(
select first ((select j.engineer from job j
where j.doctor+j.teacher+j.engineer=( select count(*) from student  ) ))
skip ((select j.doctor+j.teacher from job j
where j.doctor+j.teacher+j.engineer=( select count(*) from student  ) ))
s.student_name , 'Engineer' job_name
from student s
order by s.student_test_result desc
)
[-] كل من 1 user says قال شكرا ل Lam.Abdeldjalil على المشاركة المفيدة
  • ALG2009
الرد
#6
شكرا لك على الرد حاولت تثبيت BirdFire ولكن عجزت على الإتصال بها هل ممكن المثال بـ SQl Server

جدول Job دور تحديد كم طالب سيكون طبيب،أستاذ أو مهندس هذا دوره فقط
أضفته لأعرف كم طالب سيكون في كل مهنة على حسب عددهم يعني بعد معرفة كم طالب أذهب إلى جدول JOB وأبحث في عمود ID على عدد الطلاب إذا وجدته أعرف كم طبيب سيكون وكم أستاذ زكم من مهندس
مثال وجدت 5 طلاب وبإستناد إلى جدول Job سيكون عند 2 دكتور 2 أستاذ ومهندس واحد
وان وجدت 8 طلبة سيكون عندي 3 أظباء 3أساتذه و2 مهندس

بما أني عرفت عدد كل مهنة أقوم بتقسيم الطلبة والنتيجة ستكون على هذا الشكل :
بما أني عندي 3 أطباء سأظهر أسماء الطلبة الثلاث مع إظهار بجنبه طبيب مع مراعاة ترتيبهم بأعلى نقطة  هكذا

خالد----------->طبيب
علي---------->طبيب
محمد---------->طبيب

أساتذة
وليد----------->أستاذ
أشرف--------->أستاذ
معاذ ---------->أستاذ

مهندسين
سامي----------->مهندس
أحمد---------->مهندس
الرد
#7
السلام عليكم
الـ sqlserver تابع هنا
كود :
https://www.sqlservertutorial.net/sql-server-basics/sql-server-offset-fetch
الرد
#8
جزاك الله خيرا لقد إشتغل بالفايربيرد وفهمت جيدا جزاك الله خير

لقد قلت لي أن قاعده البيانات 
إقتباس :عندك مشكل في التصميم

بالفعل جدول Job جدول أضفته لتحديد كم سيكون عدد الطلبة في كل مهنة وهذا لعجزي على تقسيم الطلبه بالنسبة المئوية
فلو قلنا سنقسم الطلبة 30% أطباء 35% أساتذة و35% مهندسين
8 طلبة ستكون 30% هي 2.40 طالب
8 طلبة ستكون 35% هي 2.80 طالب
8 طلبة ستكون 35% هي 2.80 طالب فلو لاحظنا لا يوجد 0.80 طالب!!! قلت حسنا مادام 0.40 أقل من 0.80 سأضيفه على 2.80 لتصبح 3 و 2.80 الثانية لتصبح 3 هي أيضا وجدت هذا العمل بالنسب صعب لهذا أضفت الجدول 

مع العلم ممكن يكون عدد الطلبه 6 مثلا 
6 طلبة ستكون 35% هي 2.10 طالب و 2.10 أقل من 50% الفاصلة تعطى للأكبر لتصبح 2 طلبة فقط 
6  طلبة ستكون 35% هي 2.10 طالب  و 2.10 أقل من 50% الفاصلة تعطى للأكبر لتصبح 2 طلبة فقط
6 طلبة ستكون 30% هي 1.80 طالب تصبح 2 بعد إضافة 0.10 +0.10 بما أن عملية النسبة المئوية صعبة أضفت الجدول بدل عملية حساب النسبة المئوية وإن كانت العملية سهلة ويمكن التخلي عن الجدول أرجو الإفادة
جزاكم الله خير على الإجابة كانت تلك النتيجة التي كنت أبحث عنها
الرد
#9
السلام عليكم

إقتباس :سنقسم الطلبة 30% أطباء 35% أساتذة و35% مهندسين
هذا سؤال أكاديمي ؟ لا يمكن ان يكون في الواقع Wink
الرد
#10
(21-02-2020, 05:17 PM)Lam.Abdeldjalil كتب : السلام عليكم

إقتباس :سنقسم الطلبة 30% أطباء 35% أساتذة و35% مهندسين
هذا سؤال أكاديمي ؟ لا يمكن ان يكون في الواقع Wink

يعني مستحيل التقسيم بالنسب في هذا المثال بالـ SQL!!

لماذا مادام الرقم العشري سيضاف إلى الرقم العشري الأكبر ويصبح عدد بدون فاصلة؟
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف