تعلم لغة الاستعلام البنائية ( SQL ) – الدرس الثامن إستعلام Group by
إستعلام GROUP BY هو الإستعلام الأكثر أهمية لأغراض التحليلات ، وتزودنا بالقدرة على تجميع مجموعة من الصفوف وتلخيص نتيجة منها. على سبيل المثال – باستخدام قاعدة بيانات العملاء والطلبات ، يمكننا استخدام عبارة GROUP BY لحساب عدد الطلبات لكل عميل.
لنأخذ قاعدة بيانات عملائنا ونحسب عدد الطلبات لكل عميل
CREATE TABLE customers ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, product_name TEXT ); INSERT INTO customers (first_name, last_name) VALUES ("Ahmad", "Hicham"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Coke"), (last_insert_rowid(), "Sprite"); INSERT INTO customers (first_name, last_name) VALUES ("Walid", "Yacine"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Doritos"); .mode column .headers on SELECT first_name, last_name, COUNT(*) AS total_orders FROM customers JOIN orders ON orders.customer_id = customers.id GROUP BY orders.customer_id;
سنحصل على النتيجة التالية عند التشغيل
first_name last_name total_orders ---------- ---------- ------------ Ahmad Hicham 2 Walid Yacine 1
تمرين
اكتب استعلامًا يوضح الاسم الأول وعدد الطلبات المتاحة لكل شخص في قاعدة البيانات.
CREATE TABLE customers ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, product_name TEXT ); INSERT INTO customers (first_name, last_name) VALUES ("Ahmad", "Hicham"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Coke"), (last_insert_rowid(), "Sprite"); INSERT INTO customers (first_name, last_name) VALUES ("Walid", "Yacine"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Doritos"); -- أدخل رمزك هنا
الحل
CREATE TABLE customers ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, product_name TEXT ); INSERT INTO customers (first_name, last_name) VALUES ("Ahmad", "Hicham"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Coke"), (last_insert_rowid(), "Sprite"); INSERT INTO customers (first_name, last_name) VALUES ("Walid", "Yacine"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Doritos"); -- أدخل رمزك هنا SELECT first_name, COUNT(*) AS total_orders FROM customers JOIN orders ON orders.customer_id = customers.id GROUP BY orders.customer_id;
سنحصل على النتيجة التالية عند التشغيل
Ahmad|2 Walid|1