If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
तो अभी तक आपन कई Examples में Group By
का use देखा होगा , इस topic में हम उसी के बारे में बात करेंगे।
तो जैसा कि नाम से आप समझ सकते हैं कि records को group किया जा रहा है , GROUP BY
same value के लिए एक group create करता है और हर group के लिए एक record return करता है।
SELECT
column1, column2, [aggregate_function if any]
FROM
table
WHERE
[condition if any]
GROUP BY column1, column2;
Normally Group By को aggregate functions जैसे SUM, AVG, MAX, MIN, और COUNT के साथ use किया जाता है , क्योंकि इन function को किसी particular record के लिए total record या average calculate करने के लिए किया जाता है।
Suppose, हमारे पास users
name की एक table है , जिसमे कुछ इस तरह से records available हैं।
+----+-------------+ | id | name | +----+-------------+ | 1 | Tom | | 2 | Tom Holland | | 4 | john Doe | | 5 | John Quill | +----+-------------+
और एक दूसरी table भी है user_orders
नाम की जिसमे user के orders हैं कि user ने कौन सा product किस price पर buy किया है , और कुछ इस तरह से records मौजूद हैं।
+----+---------+---------+-------+---------------------+ | id | user_id | product | total | created_at | +----+---------+---------+-------+---------------------+ | 1 | 1 | Shoes | 455 | 2023-02-25 08:49:43 | | 2 | 2 | Clothes | 200 | 2023-02-26 03:49:43 | | 3 | 2 | Mobile | 20000 | 2023-02-26 08:32:25 | | 4 | 1 | Grocery | 999 | 2023-02-25 11:27:43 | | 5 | 1 | Books | 1100 | 2023-02-24 18:24:22 | +----+---------+---------+-------+---------------------+
अगर पता करना हो कि किसी particular user ने कुल कितने products buy करके कितने रुपये का total pay किया है , इसके लिए कुछ इस तरह से query होगी -
SELECT
users.id AS user_id, users.name, COUNT(user_orders.product) AS total_products, GROUP_CONCAT(user_orders.product) AS products, SUM(user_orders.total) AS paid_amount
FROM users
LEFT JOIN
user_orders ON user_orders.user_id=users.id
GROUP BY users.id;
Output
+---------+-------------+----------------+---------------------+-------------+ | user_id | name | total_products | products | paid_amount | +---------+-------------+----------------+---------------------+-------------+ | 1 | Tom | 3 | Shoes,Grocery,Books | 2554 | | 2 | Tom Holland | 2 | Clothes,Mobile | 20200 | | 4 | john Doe | 0 | NULL | NULL | | 5 | John Quill | 0 | NULL | NULL | +---------+-------------+----------------+---------------------+-------------+
तो कुछ इस तरह Group By का use करके important calculation करके एक meaningful Output generate किया जाता है।
इसी तरह से अगर मझे check करना है कि किसी user ने कुछ buy किया है या नहीं , तो कुछ इस तरह से query होगी -
SELECT
users.name, IF(SUM(user_orders.total) > 0, 'Yes', 'NO') AS buy_something
FROM users
LEFT JOIN
user_orders ON user_orders.user_id=users.id
GROUP BY users.id;
Output
+-------------+---------------+ | name | buy_something | +-------------+---------------+ | Tom | Yes | | Tom Holland | Yes | | john Doe | NO | | John Quill | NO | +-------------+---------------+
जरूरी नहीं है कि Group By
सिर्फ single column पर apply करें इसका का use आप हर उस जगह पर कर सकते हैं जिस column के bases पर आपको कोई calculation करनी हो। जितने columns का group का बनाना है उतने columns query में आप mention कर सकते हैं।
जैसे मुझे किसी particular user का daily bases पर order निकलने हैं कि daily किसी user ने कितने रुपये में क्या क्या ख़रीदा है। अब ध्यान से देखेंगे तो हमें 2 columns की जरूरत है पहला user id
और दूसरा date
. तो हम इन्ही दो column की grouping करेंगे।
SELECT
users.id AS user_id, DATE(user_orders.created_at) AS order_date, users.name, GROUP_CONCAT(user_orders.product) AS products, SUM(user_orders.total) AS paid_amount
FROM users
JOIN
user_orders ON user_orders.user_id=users.id
GROUP BY user_id,order_date;
Output
+---------+------------+-------------+----------------+-------------+ | user_id | order_date | name | products | paid_amount | +---------+------------+-------------+----------------+-------------+ | 1 | 2023-02-24 | Tom | Books | 1100 | | 1 | 2023-02-25 | Tom | Shoes,Grocery | 1454 | | 2 | 2023-02-26 | Tom Holland | Clothes,Mobile | 20200 | +---------+------------+-------------+----------------+-------------+
तो कुछ तरह से हम MySQL में Group By का use करते हैं , I Hope, आपको इसके बारे में अच्छे से समझ आ गया होगा।