有人可以請解釋如何使用HAVING子句,儘可能減少它。我看了看我的texbook,w3schools和youtube,但我仍然無法將自己的想法包括在內。我不知道是否過度思考,但我需要了解這一點。SQL,HAVING子句解釋
0
A
回答
3
HAVING用於過濾GROUP BY中的聚合。
例如,要檢查是否有重複的名稱:
SELECT Name FROM Usernames
GROUP BY Name
HAVING COUNT(*) > 1
假設我們有一個表:
CREATE TABLE `table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`value` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
並有10列既ID和值從1到10:
INSERT INTO `table`(`id`, `value`) VALUES (1, 1),(2, 2),(3, 3),(4, 4),(5, 5),(6, 6),(7, 7),(8, 8),(9, 9),(10, 10);
請嘗試以下2個查詢:
SELECT `value` v FROM `table` WHERE `value`>5; -- Get 5 rows
SELECT `value` v FROM `table` HAVING `value`>5; -- Get 5 rows
您將得到完全相同的結果,您可以看到HAVING子句可以在沒有GROUP BY子句的情況下工作。
這裏的區別:
SELECT `value` v FROM `table` WHERE `v`>5;
錯誤#1054 - 在未知列 'V' 'where子句'
SELECT `value` v FROM `table` HAVING `v`>5; -- Get 5 rows
WHERE子句要求的條件是在一個表中的列,但HAVING子句可以同時使用列和別名。
這是因爲WHERE子句在select之前過濾數據,但HAVING子句在select之後過濾數據。
因此,如果表中有許多行,那麼將WHERE子句中的條件更有效。
嘗試EXPLAIN看到的關鍵區別:
EXPLAIN SELECT value
v約table
WHERE value
> 5;
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
| 1 | SIMPLE | table | range | value | value | 4 | NULL | 5 | Using where; Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+--------------------------+
EXPLAIN SELECT value
v約具有value
> 5 table
;
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
| 1 | SIMPLE | table | index | NULL | value | 4 | NULL | 10 | Using index |
+----+-------------+-------+-------+---------------+-------+---------+------+------+-------------+
您可以看到WHERE或HAVING使用索引,但行數不同。
1
儘管我不確定這是否提供這些問題的正確位置,但HAVING
子句與WHERE
子句幾乎相同,但請牢記以下差異。
WHERE子句:
where子句可以使用比Select語句也
凡適用於每個和單行
在where子句中的數據獲取等根據條件從內存中刪除
在GROUP BY子句前使用的地方
例如:在條件中使用存儲器中的數據。
HAVING子句:
雖僅與SELECT語句中使用。
具有適用於總結行(與GROUP BY總結)
在具有先取出,然後根據條件分離的完成的數據。
HAVING子句用於對分組功能強加條件並在查詢
例GROUP後使用BY子句:使用平均功能,然後當過濾數據等AVA(銷售)> 0
摘要:
Having
作品像Where
子句出來Group By
條款
相關問題
- 1. SQL HAVING子句
- 2. SQL - 在HAVING子句
- 3. SQL- HAVING子句問題
- 4. SQL/SQlite的在having子句
- 5. PostgreSQL HAVING子句
- 6. 在having子句
- 7. Hibernate Criteria API - HAVING子句解決方法
- 8. HAVING SQL Server 2008中的子句問題
- 9. HAVING子句中的Oracle PL/SQL變量
- 10. SQL UNION不能使用2 HAVING子句
- 11. SQL連接兩個表having子句
- 12. HAVING子句中OrientDB
- 13. having子句問題
- 14. 混淆HAVING子句
- 15. HAVING子句VS子查詢
- 16. SQL - HAVING與遞歸語句
- 17. 對PostgreSQL的having子句
- 18. MySQL GROUP BY和HAVING子句
- 19. Mysql2 ::錯誤:having子句「
- 20. HAVING子句不工作
- 21. 選擇與HAVING子句
- 22. NHibernate的QueryOver HAVING子句
- 23. MySQL動態HAVING子句
- 24. PostgreSQL中的HAVING子句
- 25. LINQ HAVING子句內選擇
- 26. TSQL - 聚集在HAVING子句
- 27. 2X COUNT在HAVING子句
- 28. Postgresql HAVING子句限制
- 29. 選擇使用HAVING子句
- 30. T-SQL IF語句解釋