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.
MySQL में Where Clause के अलावा Having का use भी records को filter करने के लिए किया जाता है , difference यह है कि Where Clause का use normally filter करने के लिए किया जाता है वहीँ Having Clause
का use ज्यादातर grouped records को filter करने के लिए किया जाता है।
Normally Having Clause को Group By के साथ किसी condition के bases पर use किया जाता है
HAVING clause का basic syntax कुछ इस तरह से होता है -
SELECT
column_list
FROM
table_name
WHERE
[where_condition if any]
GROUP BY
column_name
HAVING
group_condition;
MySQL HAVING clause को ORDER BY , LIMIT से पहले और SELECT , WHERE , GROUP BY के बाद evaluate करता है , तो query run करते समय यह इसका ध्यान रखें।
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 चाहिए जिन्होंने total 10000
से ज्यादा के products buy किये हैं , इसके लिए कुछ इस तरह से query होगी -
SELECT
users.id AS user_id, users.name,SUM(user_orders.total) AS paid_amount
FROM users
JOIN
user_orders ON user_orders.user_id=users.id
GROUP BY user_id
HAVING paid_amount > 10000;
Output
+---------+-------------+-------------+ | user_id | name | paid_amount | +---------+-------------+-------------+ | 2 | Tom Holland | 20200 | +---------+-------------+-------------+
जरूरी नहीं है कि Having Clause में सिर्फ single column पर condition apply करें आप अपनी need के according AND या OR operator का use करके multiple conditions रख सकते हैं।
जैसे अब मुझे वो particular user चाहिए जिन्होंने total 2000
से कम के products buy किये हैं , और date 2023-2-25
से ज्यादा या बराबर है -
SELECT
users.id AS user_id, DATE(user_orders.created_at) AS order_date, users.name, SUM(user_orders.total) AS paid_amount
FROM users
LEFT JOIN
user_orders ON user_orders.user_id=users.id
GROUP BY user_id,order_date
HAVING paid_amount < 2000 AND order_date >= '2023-2-25';
Output
+---------+------------+------+-------------+ | user_id | order_date | name | paid_amount | +---------+------------+------+-------------+ | 1 | 2023-02-25 | Tom | 1454 | +---------+------------+------+-------------+
Hi ! My name is Rahul Kumar Rajput. I'm a back end web developer and founder of learnhindituts.com. I live in Uttar Pradesh (UP), India and I love to talk about programming as well as writing technical tutorials and tips that can help to others.
Get connected with me. :) LinkedIn Twitter Instagram Facebook