MySQL資料庫對GROUP BY子句的功能擴充套件(2)
前面談了MySQL中處理GROUP BY子句時隱藏列的一些特點,今天繼續探討這一話題,引申談一談別名在GROUP BY子句中的應用。
我們在SELECT執行查詢時經常會應用到別名,主要是對查詢列名的重定義,在ANSI標準SQL規則中,對於定義的別名引用還是比較多的,不過MySQL資料庫對於別名的引用也有一些增加,最顯著的一點,就是允許在GROUP BY/ORDER BY子句中引用定義的別名。
舉個例子,有表如下:
mysql> select * from j1;
+------+------+
| id | vl |
+------+------+
| 1 | a |
| 1 | b |
| 2 | c |
| 3 | d |
+------+------+
4 rows in set (0.00 sec)
我們想查詢id分組排序後數量大於1的記錄,標準SQL寫法應該是:
mysql> select id,count(0) as ct from j1 group by id having count(0)>1;
+------+----------+
| id | ct |
+------+----------+
| 1 | 2 |
+------+----------+
1 row in set (0.00 sec)
如例中所示,雖然SELECT中已對count(0)做了別名,但標準SQL中當GROUP BY子句中需要過濾這一條件時,必須將該列的完整形式重寫一遍,而不支援直接引用別名的方式呼叫。
MySQL資料庫對HAVING子句的引用功能進行了些許擴充套件,這在一定情況下可以簡化having的寫法,例如,上述語句可以改寫成:
mysql> select id,count(0) ct from j1 group by id having ct>1;
+------+----+
| id | ct |
+------+----+
| 1 | 2 |
+------+----+
1 row in set (0.00 sec)
提示:如果啟動mysql服務時指定了sql_mode值為ONLY_FULL_GROUP_BY,就不支援這種寫法了。
定義的別名也同樣適用於ORDER BY子句,如例:
mysql> select id,count(0) ct from j1 group by id order by ct;
+------+----+
| id | ct |
+------+----+
| 2 | 1 |
| 3 | 1 |
| 1 | 2 |
+------+----+
3 rows in set (0.00 sec)
以及GROUP BY子句,如例:
mysql> insert into j1 values (10,'a10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (11,'a11');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (12,'a12');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (13,'b10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into j1 values (14,'b11');
Query OK, 1 row affected (0.00 sec)
mysql> select substr(vl,1,2) as c,count(0) from j1 where id>9 group by c;
+------+----------+
| c | count(0) |
+------+----------+
| a1 | 3 |
| b1 | 2 |
+------+----------+
2 rows in set (0.00 sec)
這種方式的優點在於可以簡化SQL語句的寫法,比如說當分組條件比如複雜時,不需要重複寫多次,只要在SELECT中定義好別名,然後其它地方引用時指定別名即可。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-693094/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL資料庫對GROUP BY子句的功能擴充套件(1)MySql資料庫套件
- C 擴充套件庫 – mysql API套件MySqlAPI
- MySQL中InnoDB引擎對索引的擴充套件MySql索引套件
- MySQL - 擴充套件性 2 擴充套件策略:氪金氪腦任君選MySql套件
- 擴充套件你的KUBECTL功能套件
- 報表開發之擴充套件GROUP BY套件
- PHP的SPL擴充套件庫(一)資料結構PHP套件資料結構
- GBASE觀察:擴充套件分析型資料庫套件資料庫
- MySQL InnoDB的索引擴充套件MySql索引套件
- 大資料——Scala擴充套件大資料套件
- 資料塊、資料擴充套件、段套件
- 使用nub恢復資料庫的知識擴充套件資料庫套件
- 可動態擴充套件的資料庫模型設計套件資料庫模型
- DLR 的擴充套件庫 Dynamitey套件MIT
- SQL Server資料庫檔案不滿足擴充套件條件時不再自動擴充套件SQLServer資料庫套件
- 資料檢索擴充套件包套件
- 擴充套件資料檔案大小套件
- java資料型別擴充套件Java資料型別套件
- 讓前端也能填充資料庫的 Reach Seeder 擴充套件前端資料庫套件
- 可擴充套件的資料庫系統,請求批評套件資料庫
- SpringCloudGateway資料庫儲存路由資訊的擴充套件方案SpringGCCloudGateway資料庫路由套件
- PostgreSQL在雲端:部署、管理和擴充套件你的資料庫SQL套件資料庫
- 在 GitLab 我們是如何擴充套件資料庫的Gitlab套件資料庫
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- 知識庫(2)-使用Windows OpenGL擴充套件機制來訪問OpenGL擴充套件 (轉)Windows套件
- 聊聊如何基於eureka後設資料擴充套件namespace功能套件namespace
- 【Unity】2DSprite的擴充套件Unity套件
- [譯] 論資料流的擴充套件性套件
- ehcarts擴充套件優秀的資料表套件
- php mysqli擴充套件庫的使用PHPMySql套件
- 資料庫擴充套件表設計過程記錄資料庫套件
- php mysql擴充套件安裝PHPMySql套件
- MySql 擴充套件儲存引擎MySql套件儲存引擎
- PHP 擴充套件 Mysql 與 MysqliPHP套件MySql
- 【Oracle】 Oracle11gR2 擴充套件資料庫聯機日誌檔案Oracle套件資料庫
- INFORMIX表的預設初始擴充套件、下一個擴充套件資料塊以及一個表允許的最大擴充套件數。ORM套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- Google 為 Chrome 加入新的資料壓縮擴充套件功能 —— 你信任它?GoChrome套件