These Examples can help you better understand how the HAVING Clause can be used in MySQL SELECT queries. A good understanding of this clause can help you write very powerful MySQL queries.
Filtering based on Aggregate Results:
SELECT category, COUNT(*) as total_products
GROUP BY category
HAVING total_products > 10;
This query filters the result set to only include categories that have more than 10 products.
SELECT country, AVG(sales) as average_sales
GROUP BY country
HAVING SUM(quantity) > 1000;
This query calculates the average sales per country but only includes countries where the total quantity sold is more than 1000.
SELECT product_name, revenue
GROUP BY product_name
HAVING revenue > (SELECT AVG(revenue) FROM sales);
This query selects products whose revenue is higher than the average revenue across all products.
Combining HAVING with Window Functions:
SELECT customer_id, order_date, total_amount,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY total_amount DESC) as rank
HAVING rank <= 3;
This query uses the ROW_NUMBER() window function to assign a rank to each customer's orders based on the total amount. The HAVING clause then filters the result set to include only the top 3 ranked orders for each customer.
These examples demonstrate the versatility and power of the HAVING clause in MySQL SELECT queries.
By leveraging the HAVING clause, developers can perform advanced filtering, aggregations, and analytical calculations to extract valuable insights from complex databases.