久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

數據庫中group by和having語法使用是什么樣的

134次閱讀
沒有評論

共計 3340 個字符,預計需要花費 9 分鐘才能閱讀完成。

本篇文章給大家分享的是有關數據庫中 group by 和 having 語法使用是什么樣的,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

有個朋友問我一個返話費的問題,大概意思是這樣的:只需把表 deal 中所有手機用戶某天充值兩次以上且總金額超過 50 的用戶充值記錄查詢出來,至于怎么進行返話費那不是重點。

先看看 group by 的語法:

SELECT column1, SUM(column2) FROM list-of-tables GROUP BY column-list  

GROUP BY 子句將集中所有的行在一起,它包含了指定列的數據以及允許合計函數來計算一個或者多個列。

假設我們將從員工表 employee 表中搜索每個部門中工資最高的薪水,可以使用以下的 SQL 語句:

SELECT max(salary), dept FROM employee GROUP BY dept; 

這條語句將在每一個單獨的部門中選擇工資最高的工資,結果將他們的 salary 和 dept 返回。

  group by 顧名思義就是按照 xxx 進行分組,它必須有“聚合函數”來配合才能使用,使用時至少需要一個分組標識字段。

  聚合函數有:sum()、count()、avg()等,使用 group by 目的就是要將數據分組進行匯總操作。

  例如對員工表的操作:

select dept_id,count(emp_id),sum(salary) form employee  group by dept_id; 

  這樣的運行結果就是以“dept_id”為分類標志統計各單位的職工人數和工資總額。

再看看 having 的語法:

SELECT column1, SUM(column2) FROM“list-of-tables”GROUP BY“column-list”HAVING“condition”; 

這個 HAVING 子句的作用就是為每一個組指定條件,像 where 指定條件一樣,也就是說,可以根據你指定的條件來選擇行。如果你要使用 HAVING 子句的話,它必須處在 GROUP BY 子句之后。

  例如還是對員工表的操作:

SELECT dept_id, avg(sal) FROM employee GROUP BY dept_id HAVING avg(salary) = 4000; 

  這樣的運行結果就是以“dept_id”為分類標志統計各單位的職工人數和工資平均數且工資平均數大于 4000。

下面開始我們的返話費查詢功能的實現:

話費表 deal 字段有這些:

sell_no: 訂單編號

name: 用戶名

phone: 用戶手機號

amount: 充值金額

date: 充值日期

上邊就這些有效字段,假如數據(數據純屬虛構,如有 *,純是巧合)如下:

sell_no   name  phone  amount  date 

00000000001  李曉紅   15822533496  50  2011-10-23 08:09:23 

00000000002  李曉紅   15822533496  60  2011-10-24 08:15:34 

00000000003  李曉紅   15822533496  30  2011-10-24 12:20:56 

00000000004  楊 軒   18200000000  100  2011-10-24 07:59:43 

00000000005  楊 軒   18200000000  200  2011-10-24 10:11:11 

00000000006  柳夢璃   18211111111  50  2011-10-24 09:09:46 

00000000007  韓菱紗   18222222222  50  2011-10-24 08:09:45 

00000000008  云天河   18333333333  50  2011-10-24 08:09:25 

把以上數據當天 (2011-10-24) 交過兩次話費,而且總金額大于 50 的數據取出來,要取的結果如下:

00000000002  李曉紅   15822533496  60  2011-10-24 08:15:34 

00000000003  李曉紅   15822533496  30  2011-10-24 12:20:56 

00000000004  楊 軒   18200000000  100  2011-10-24 07:59:43 

00000000005  楊 軒   18200000000  200  2011-10-24 10:11:11 

因為今天 (2011-10-24) 李曉紅和楊軒交過兩次以上話費,而且總金額大于 50,所以有他們的數據,而柳夢璃,韓菱紗,云天河只交過一次,所以沒他們的數據。

我的處理思路大概是這樣的,先把當天日期的記錄用 group by 進行手機號分組即一個手機號為一組,接著用 having 子句進行過濾,把交過兩次話費且話費總金額大于 50 的手機號查出來,最后用手機號和日期條件組合查詢就能完成數據的查詢,具體如下。

  注意日期處理細節,要查詢的某一天 (yyyy-MM-dd) 的所有記錄是這樣處理的:

SELECT date_format(date, %Y-%m-%d) from deal; 

  查詢出符合條件(交過兩次以上話費,而且總金額大于 50)的手機號:

select phone from deal where date_format(date, %Y-%m-%d)= 2011-10-24 group by phone having count(phone) 1 and sum(amount)  

  結合手機號和日期查詢出最終記錄:

select * from deal where date_format(date, %Y-%m-%d)= 2011-10-24 and phone in 

  (select phone from deal where date_format(date, %Y-%m-%d)= 2011-10-24  

  group by phone having count(phone) 1 and sum(amount) 50) order by phone; 

  里邊嵌套了一個 select 語句,感覺效率低點了,誰有更高效的方法不?

附數據建庫 sql 代碼:

create database if not exists `phone_deal`; 

USE `phone_deal`; 

DROP TABLE IF EXISTS `deal`; 

CREATE TABLE `deal` ( 

  `sell_no` varchar(100) NOT NULL, 

  `name` varchar(100) default NULL, 

  `phone` varchar(100) default NULL, 

  `amount` decimal(10,0) default NULL, 

  `date` datetime default NULL, 

  PRIMARY KEY  (`sell_no`) 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

insert  into `deal`(`sell_no`,`name`,`phone`,`amount`,`date`) values (00001 , 李曉紅 , 15822533496 , 60 , 2011-10-23 08:09:23),(00002 , 李曉紅 , 15822533496 , 50 , 2011-10-24 08:15:34),(00003 , 李曉紅 , 15822533496 , 40 , 2011-10-24 12:20:56),(00004 , 楊軒 , 18210607179 , 100 , 2011-10-24 07:59:43),(00005 , 楊軒 , 18210607179 , 50 , 2011-10-24 10:11:11),(00006 , 柳夢璃 , 15822533492 , 1000 , 2011-10-24 09:09:46),(00007 , 韓菱紗 , 15822533493 , 10000 , 2011-10-24 08:09:45),(00008 , 云天河 , 15822533494 , 500 , 2011-10-24 08:09:25    

以上就是數據庫中 group by 和 having 語法使用是什么樣的,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-18發表,共計3340字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 台南县| 溆浦县| 钟祥市| 博湖县| 莲花县| 嘉峪关市| 瑞安市| 鲁山县| 邛崃市| 镇沅| 新余市| 连江县| 本溪市| 肥东县| 洛阳市| 屯昌县| 科技| 天门市| 陇川县| 泾川县| 济南市| 贡嘎县| 丰原市| 呼伦贝尔市| 莒南县| 嵊泗县| 渝中区| 禄劝| 鄂伦春自治旗| 疏勒县| 诏安县| 上杭县| 公主岭市| 宝鸡市| 龙川县| 资中县| 林口县| 延津县| 厦门市| 辉县市| 鹤壁市|