OraclePL/SQL單行函數(shù)和組函數(shù)詳解
2
3 單行函數(shù)
4
5 組函數(shù)
6
7 本文將討論如何利用單行函數(shù)以及使用規(guī)則。
8
9 SQL中的單行函數(shù)
10
11 SQL和PL/SQL中自帶很多類型的函數(shù),有字符、數(shù)字、日期、轉(zhuǎn)換、和混合型等多種函數(shù)用于處理單行數(shù)據(jù),因此這些都可被統(tǒng)稱為單行函數(shù)。這些函數(shù)均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等單行函數(shù)。
12
13SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')
14FROM emp
15Where UPPER(ename) Like 'AL%'
16ORDER BY SOUNDEX(ename)
17
18 單行函數(shù)也可以在其他語(yǔ)句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,認(rèn)證考試特別注意在SELECT語(yǔ)句中使用這些函數(shù),所以我們的注意力也集中在SELECT語(yǔ)句中。
19
20 NULL和單行函數(shù)
21
22 在如何理解NULL上開始是很困難的,就算是一個(gè)很有經(jīng)驗(yàn)的人依然對(duì)此感到困惑。NULL值表示一個(gè)未知數(shù)據(jù)或者一個(gè)空值,算術(shù)操作符的任何一個(gè)操作數(shù)為NULL值,結(jié)果均為提個(gè)NULL值,這個(gè)規(guī)則也適合很多函數(shù),只有CONCAT,DECODE,DUMP,NVL,REPLACE在調(diào)用了NULL參數(shù)時(shí)能夠返回非NULL值。在這些中NVL函數(shù)時(shí)最重要的,因?yàn)樗苤苯犹幚鞱ULL值,NVL有兩個(gè)參數(shù):NVL(x1,x2),x1和x2都式表達(dá)式,當(dāng)x1為null時(shí)返回X2,否則返回x1。
23
24 下面我們看看emp數(shù)據(jù)表它包含了薪水、獎(jiǎng)金兩項(xiàng),需要計(jì)算總的補(bǔ)償
25
26column name emp_id salary bonus
27
28key type pk
29nulls/unique nn,u nn
30fk table
31datatype number number number
32length 11.2 11.2
33
34 不是簡(jiǎn)單的將薪水和獎(jiǎng)金加起來(lái)就可以了,如果某一行是null值那么結(jié)果就將是null,比如下面的例子:
35
36update emp
37set salary=(salary+bonus)*1.1
38
39 這個(gè)語(yǔ)句中,雇員的工資和獎(jiǎng)金都將更新為一個(gè)新的值,但是如果沒(méi)有獎(jiǎng)金,即 salary + null,那么就會(huì)得出錯(cuò)誤的結(jié)論,這個(gè)時(shí)候就要使用nvl函數(shù)來(lái)排除null值的影響。
40所以正確的語(yǔ)句是:
41
42update emp
43set salary=(salary+nvl(bonus,0)*1.1
44
45 單行字符串函數(shù)
46
47 單行字符串函數(shù)用于操作字符串?dāng)?shù)據(jù),他們大多數(shù)有一個(gè)或多個(gè)參數(shù),其中絕大多數(shù)返回字符串
48
49 ASCII()
50 c1是一字符串,返回c1第一個(gè)字母的ASCII碼,他的逆函數(shù)是CHR()
51
52SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM emp
53
54BIG_A BIG_z
5565 122
56
57 CHR(<i>)[NCHAR_CS]
58 i是一個(gè)數(shù)字,函數(shù)返回十進(jìn)制表示的字符
59
60select CHR(65),CHR(122),CHR(223) FROM emp
61
62CHR65 CHR122 CHR223
63A z B
64
65 CONCAT(,)
66 c1,c2均為字符串,函數(shù)將c2連接到c1的后面,如果c1為null,將返回c2.如果c2為null,則返回c1,如果c1、c2都為null,則返回null。他和操作符||返回的結(jié)果相同
67
68select concat('slobo ','Svoboda') username from dual
69
70username
71
72slobo Syoboda
73
74
75 INITCAP()
76 c1為一字符串。函數(shù)將每個(gè)單詞的第一個(gè)字母大寫其它字母小寫返回。單詞由空格,控制字符,標(biāo)點(diǎn)符號(hào)限制。
77
78select INITCAP('veni,vedi,vici') Ceasar from dual
79
80Ceasar
81
82Veni,Vedi,Vici
83
84
85 INSTR(,[,<i>[,]])
86 c1,c2均為字符串,i,j為整數(shù)。函數(shù)返回c2在c1中第j次出現(xiàn)的位置,搜索從c1的第i個(gè)字符開始。當(dāng)沒(méi)有發(fā)現(xiàn)需要的字符時(shí)返回0,如果i為負(fù)數(shù),那么搜索將從右到左進(jìn)行,但是位置的計(jì)算還是從左到右,i和j的缺省值為1.
87
88select INSTR('Mississippi','i',3,3) from dual
89
90INSTR('MISSISSIPPI','I',3,3)
91
9211
93
94select INSTR('Mississippi','i',-2,3) from dual
95
96INSTR('MISSISSIPPI','I',3,3)
97
982
99
100
101 INSTRB(,[,i[,j])
102 與INSTR()函數(shù)一樣,只是他返回的是字節(jié),對(duì)于單字節(jié)INSTRB()等于INSTR()
103
104 LENGTH()
105 c1為字符串,返回c1的長(zhǎng)度,如果c1為null,那么將返回null值。
106
107select LENGTH('Ipso Facto') ergo from dual
108
109ergo
110
11110
112
113 LENGTHb()
114 與LENGTH()一樣,返回字節(jié)。
115
116 lower()
117 返回c的小寫字符,經(jīng)常出現(xiàn)在where子串中
118
119select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'
120
121COLORNAME
122
123Winterwhite
124
125
126 LPAD(,<i>[,])
127 c1,c2均為字符串,i為整數(shù)。在c1的左側(cè)用c2字符串補(bǔ)足致長(zhǎng)度i,可多次重復(fù),如果i小于c1的長(zhǎng)度,那么只返回i那么長(zhǎng)的c1字符,其他的將被截去。c2的缺省值為單空格,參見RPAD。
128
129select LPAD(answer,7,'') padded,answer unpadded from question;
130
131PADDED UNPADDED
132
133Yes Yes
134NO NO
135Maybe maybe
136
137
138 LTRIM(,)
13正在看的ORACLE教程是:OraclePL/SQL單行函數(shù)和組函數(shù)詳解。9 把c1中最左邊的字符去掉,使其第一個(gè)字符不在c2中,如果沒(méi)有c2,那么c1就不會(huì)改變。
140
141select LTRIM('Mississippi','Mis') from dual
142
143LTR
144
145ppi
146
147 RPAD(,<i>[,])
148 在c1的右側(cè)用c2字符串補(bǔ)足致長(zhǎng)度i,可多次重復(fù),如果i小于c1的長(zhǎng)度,那么只返回i那么長(zhǎng)的c1字符,其他的將被截去。c2的缺省值為單空格,其他與LPAD相似
149
150 RTRIM(,)
151 把c1中最右邊的字符去掉,使其第后一個(gè)字符不在c2中,如果沒(méi)有c2,那么c1就不會(huì)改變。
152
153 REPLACE(,[,])
154 c1,c2,c3都是字符串,函數(shù)用c3代替出現(xiàn)在c1中的c2后返回。
155
156select REPLACE('uptown','up','down') from dual
157
158REPLACE
159
160downtown
161
162 STBSTR(,<i>[,])
163 c1為一字符串,i,j為整數(shù),從c1的第i位開始返回長(zhǎng)度為j的子字符串,如果j為空,則直到串的尾部。
164
165select SUBSTR('Message',1,4) from dual
166
167SUBS
168
169Mess
170
171
172 SUBSTRB(,<i>[,])
173 與SUBSTR大致相同,只是I,J是以字節(jié)計(jì)算。
174
175 SOUNDEX()
176 返回與c1發(fā)音相似的詞
177
178select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dual
179
180Dawes Daws Dawson
181
182D200 D200 D250
183
184 TRANSLATE(,,)
185 將c1中與c2相同的字符以c3代替
186
187select TRANSLATE('fumble','uf','ar') test from dual
188
189TEXT
190
191ramble
192
193 TRIM([[]] from c3)
194 將c3串中的第一個(gè),最后一個(gè),或者都刪除。
195
196select TRIM(' space padded ') trim from dual
197
198TRIM
199
200space padded
201
202 UPPER()
203 返回c1的大寫,常出現(xiàn)where子串中
204
205select name from dual where UPPER(name) LIKE 'KI%'
206
207NAME
208
209KING
210
211 單行數(shù)字函數(shù)
212
213 單行數(shù)字函數(shù)操作數(shù)字?jǐn)?shù)據(jù),執(zhí)行數(shù)學(xué)和算術(shù)運(yùn)算。所有函數(shù)都有數(shù)字參數(shù)并返回?cái)?shù)字值。所有三角函數(shù)的操作數(shù)和值都是弧度而不是角度,oracle沒(méi)有提供內(nèi)建的弧度和角度的轉(zhuǎn)換函數(shù)。
214
215 ABS()
216 返回n的絕對(duì)值
217
218 ACOS()
219 反余玄函數(shù),返回-1到1之間的數(shù)。n表示弧度
220
221select ACOS(-1) pi,ACOS(1) ZERO FROM dual
222
223PI ZERO
224
2253.14159265 0
226
227 ASIN()
228 反正玄函數(shù),返回-1到1,n表示弧度
229
230 ATAN()
231 反正切函數(shù),返回n的反正切值,n表示弧度。
232
233 CEIL()
234 返回大于或等于n的最小整數(shù)。
235
236 COS()
237 返回n的余玄值,n為弧度
238
239 COSH()
240 返回n的雙曲余玄值,n 為數(shù)字。
241
242select COSH(<1.4>) FROM dual
243
244COSH(1.4)
245
2462.15089847
247
248 EXP()
249 返回e的n次冪,e=2.71828183.
250
251 FLOOR()
252 返回小于等于N的最大整數(shù)。
253
254 LN()
255 返回N的自然對(duì)數(shù),N必須大于0
256
257 LOG(,)
258 返回以n1為底n2的對(duì)數(shù)
259
260 MOD()
261 返回n1除以n2的余數(shù),
262
263 POWER(,)
264 返回n1的n2次方
265
266 ROUND(,)
267 返回舍入小數(shù)點(diǎn)右邊n2位的n1的值,n2的缺省值為0,這回將小數(shù)點(diǎn)最接近的整數(shù),如果n2為負(fù)數(shù)就舍入到小數(shù)點(diǎn)左邊相應(yīng)的位上,n2必須是整數(shù)。
[NextPage]
268
269select ROUND(12345,-2),ROUND(12345.54321,2) FROM dual
270
271ROUND(12345,-2) ROUND(12345.54321,2)
272
27312300 12345.54
274
275 SIGN()
276 如果n為負(fù)數(shù),返回-1,如果n為正數(shù),返回1,如果n=0返回0.
277
278 SIN()
279 返回n的正玄值,n為弧度。
280
281 SINH()
282 返回n的雙曲正玄值,n為弧度。
283
284 SQRT()
285 返回n的平方根,n為弧度
286
287 TAN()
288 返回n的正切值,n為弧度
289
290 TANH()
291 返回n的雙曲正切值,n為弧度
292
293 TRUNC(,)
294 返回截尾到n2位小數(shù)的n1的值,n2缺省設(shè)置為0,當(dāng)n2為缺省設(shè)置時(shí)會(huì)將n1截尾為整數(shù),如果n2為負(fù)值,就截尾在小數(shù)點(diǎn)左邊相應(yīng)的位上。
295
296 單行日期函數(shù)
297
298 單行日期函數(shù)操作DATA數(shù)據(jù)類型,絕大多數(shù)都有DATA數(shù)據(jù)類型的參數(shù),絕大多數(shù)返回的也是DATA數(shù)據(jù)類型的值。
299
300 ADD_MONTHS(,<i>)
301 返回日期d加上i個(gè)月后的結(jié)果。i可以使任意整數(shù)。如果i是一個(gè)小數(shù),那么數(shù)據(jù)庫(kù)將隱式的他轉(zhuǎn)換成整數(shù),將會(huì)截去小數(shù)點(diǎn)后面的部分。
302
303 LAST_DAY()
304 函數(shù)返回包含日期d的月份的最后一天
305
306 MONTHS_BETWEEN(,)
307 返回d1和d2之間月的數(shù)目,如果d1和d2的日的日期都相同,或者都使該月的最后一天,那么將返回一個(gè)整數(shù),否則會(huì)返回的結(jié)果將包含一個(gè)分?jǐn)?shù)。
308
309 NEW_TIME(,,)
310 d1是一個(gè)日期數(shù)據(jù)類型,當(dāng)時(shí)區(qū)tz1中的日期和時(shí)間是d時(shí),返回時(shí)區(qū)tz2中的日期和時(shí)間。tz1和tz2時(shí)字符串。
311
312 NEXT_DAY(,)
313 返回日期d后由dow給出的條件的第一天,dow使用當(dāng)前會(huì)話中給出的語(yǔ)言指定了一周中的某一天,返回的時(shí)間分量與d的時(shí)間分量相同。
314
315select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;
316
3171st Monday 2nd Tuesday
318
31903-Jan-2000 09-Nov-2004
320
321 ROUND([,])
322 將日期d按照f(shuō)mt指定的格式舍入,fmt為字符串。
323
324 SYADATE
325 函數(shù)沒(méi)有參數(shù),返回當(dāng)前日期和時(shí)間。
326
327 TRUNC([,])
328 返回由fmt指定的單位的日期d.
329
330 單行轉(zhuǎn)換函數(shù)
331
332
上一頁(yè) [1] [2] [3] [4] 下一頁(yè)
正在看的ORACLE教程是:OraclePL/SQL單行函數(shù)和組函數(shù)詳解。 單行轉(zhuǎn)換函數(shù)用于操作多數(shù)據(jù)類型,在數(shù)據(jù)類型之間進(jìn)行轉(zhuǎn)換。333
334 CHARTORWID()
335 c 使一個(gè)字符串,函數(shù)將c轉(zhuǎn)換為RWID數(shù)據(jù)類型。
336
337SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')
338
339 CONVERT(,[,])
340 c尾字符串,dset、sset是兩個(gè)字符集,函數(shù)將字符串c由sset字符集轉(zhuǎn)換為dset字符集,sset的缺省設(shè)置為數(shù)據(jù)庫(kù)的字符集。
341
342 HEXTORAW()
343 x為16進(jìn)制的字符串,函數(shù)將16進(jìn)制的x轉(zhuǎn)換為RAW數(shù)據(jù)類型。
344
345 RAWTOHEX()
346 x是RAW數(shù)據(jù)類型字符串,函數(shù)將RAW數(shù)據(jù)類轉(zhuǎn)換為16進(jìn)制的數(shù)據(jù)類型。
347
348 ROWIDTOCHAR()
349 函數(shù)將ROWID數(shù)據(jù)類型轉(zhuǎn)換為CHAR數(shù)據(jù)類型。
350
351 TO_CHAR([[,)
352 x是一個(gè)data或number數(shù)據(jù)類型,函數(shù)將x轉(zhuǎn)換成fmt指定格式的char數(shù)據(jù)類型,如果x為日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的語(yǔ)言。如果x為數(shù)字nlsparm=NLS_NUMERIC_CHARACTERS 用來(lái)指定小數(shù)位和千分位的分隔符,以及貨幣符號(hào)。
353
354NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"
355
356 TO_DATE([,[,)
357 c表示字符串,fmt表示一種特殊格式的字符串。返回按照f(shuō)mt格式顯示的c,nlsparm表示使用的語(yǔ)言。函數(shù)將字符串c轉(zhuǎn)換成date數(shù)據(jù)類型。
358
359 TO_MULTI_BYTE()
360 c表示一個(gè)字符串,函數(shù)將c的擔(dān)子截字符轉(zhuǎn)換成多字節(jié)字符。
361
362 TO_NUMBER([,[,)
363 c表示字符串,fmt表示一個(gè)特殊格式的字符串,函數(shù)返回值按照f(shuō)mt指定的格式顯示。nlsparm表示語(yǔ)言,函數(shù)將返回c代表的數(shù)字。
364
365 TO_SINGLE_BYTE()
366 將字符串c中得多字節(jié)字符轉(zhuǎn)化成等價(jià)的單字節(jié)字符。該函數(shù)僅當(dāng)數(shù)據(jù)庫(kù)字符集同時(shí)包含單字節(jié)和多字節(jié)字符時(shí)才使用
367
368 其它單行函數(shù)
369
370 BFILENAME(
371,)
372 dir是一個(gè)directory類型的對(duì)象,file為一文件名。函數(shù)返回一個(gè)空的BFILE位置值指示符,函數(shù)用于初始化BFILE變量或者是BFILE列。
373
374 DECODE(,,[,,,[])
375 x是一個(gè)表達(dá)式,m1是一個(gè)匹配表達(dá)式,x與m1比較,如果m1等于x,那么返回r1,否則,x與m2比較,依次類推m3,m4,m5.直到有返回結(jié)果。
376
377 DUMP(,[,[,[,]]])
378 x是一個(gè)表達(dá)式或字符,fmt表示8進(jìn)制、10進(jìn)制、16進(jìn)制、或則單字符。函數(shù)返回包含了有關(guān)x的內(nèi)部表示信息的VARCHAR2類型的值。如果指定了n1,n2那么從n1開始的長(zhǎng)度為n2的字節(jié)將被返回。
379
380 EMPTY_BLOB()
381 該函數(shù)沒(méi)有參數(shù),函數(shù)返回 一個(gè)空的BLOB位置指示符。函數(shù)用于初始化一個(gè)BLOB變量或BLOB列。
382
383 EMPTY_CLOB()
384 該函數(shù)沒(méi)有參數(shù),函數(shù)返回 一個(gè)空的CLOB位置指示符。函數(shù)用于初始化一個(gè)CLOB變量或CLOB列。
385
386 GREATEST()
387 exp_list是一列表達(dá)式,返回其中最大的表達(dá)式,每個(gè)表達(dá)式都被隱含的轉(zhuǎn)換第一個(gè)表達(dá)式的數(shù)據(jù)類型,如果第一個(gè)表達(dá)式是字符串?dāng)?shù)據(jù)類型中的任何一個(gè),那么返回的結(jié)果是varchar2數(shù)據(jù)類型, 同時(shí)使用的比較是非填充空格類型的比較。
388
389 LEAST()
390 exp_list是一列表達(dá)式,返回其中最小的表達(dá)式,每個(gè)表達(dá)式都被隱含的轉(zhuǎn)換第一個(gè)表達(dá)式的數(shù)據(jù)類型,如果第一個(gè)表達(dá)式是字符串?dāng)?shù)據(jù)類型中的任何一個(gè),將返回的結(jié)果是varchar2數(shù)據(jù)類型, 同時(shí)使用的比較是非填充空格類型的比較。
391
392 UID
393 該函數(shù)沒(méi)有參數(shù),返回唯一標(biāo)示當(dāng)前數(shù)據(jù)庫(kù)用戶的整數(shù)。
394
395 USER
396 返回當(dāng)前用戶的用戶名
397
398 USERENV()
399 基于opt返回包含當(dāng)前會(huì)話信息。opt的可選值為:
400
401 ISDBA 會(huì)話中SYSDBA腳色響應(yīng),返回TRUE
402 SESSIONID 返回審計(jì)會(huì)話標(biāo)示符
403 ENTRYID 返回可用的審計(jì)項(xiàng)標(biāo)示符
404 INSTANCE 在會(huì)話連接后,返回實(shí)例標(biāo)示符。該值只用于運(yùn)行Parallel 服務(wù)器并且有 多個(gè)實(shí)例的情況下使用。
405 LANGUAGE 返回語(yǔ)言、地域、數(shù)據(jù)庫(kù)設(shè)置的字符集。
406 LANG 返回語(yǔ)言名稱的ISO縮寫。
407 TERMINAL 為當(dāng)前會(huì)話使用的終端或計(jì)算機(jī)返回操作系統(tǒng)的標(biāo)示符。
408
409 VSIZE()
410 x是一個(gè)表達(dá)式。返回x內(nèi)部表示的字節(jié)數(shù)。
411
412 SQL中的組函數(shù)
413
414 組函數(shù)也叫集合函數(shù),返回基于多個(gè)行的單一結(jié)果,行的準(zhǔn)確數(shù)量無(wú)法確定,除非查詢被執(zhí)行并且所有的結(jié)果都被包含在內(nèi)。與單行函數(shù)不同的是,在解析時(shí)所有的行都是已知的。由于這種差別使組函數(shù)與單行函數(shù)有在要求和行為上有微小的差異.
415
416 組(多行)函數(shù)
417
418 與單行函數(shù)相比,oracle提供了豐富的基于組的,多行的函數(shù)。這些函數(shù)可以在select或select的having子句中使用,當(dāng)用于select子串時(shí)常常都和GROUP BY一起使用。
419
420 AVG([{DISYINCT|ALL}])
421 返回?cái)?shù)值的平均值。缺省設(shè)置為ALL.
422
423SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.emp
424
425AVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)
426
4271877.94118 1877.94118 1916.071413
428
429
430 COUNT({*|DISTINCT|ALL} )
431 返回查詢中行的數(shù)目,缺省設(shè)置是ALL,*表示返回所有的行。
432
433 MAX([{DISTINCT|ALL}])
434 返回選擇列表項(xiàng)目的最大值,如果x是字符串?dāng)?shù)據(jù)類型,他返回一個(gè)VARCHAR2數(shù)據(jù)類型,如果X是一個(gè)DATA數(shù)據(jù)類型,返回一個(gè)日期,如果X是numeric數(shù)據(jù)類型,返回一個(gè)數(shù)字。注意distinct和all不起作用,應(yīng)為最大值與這兩種設(shè)置是相同的。
435
436 MIN([{DISTINCT|ALL}])
437 返回選擇列表項(xiàng)目的最小值。
438
439 STDDEV([{DISTINCT|ALL}])
440 返回選者的列表項(xiàng)目的標(biāo)準(zhǔn)差,所謂標(biāo)準(zhǔn)差是方差的平方根。
441
442 SUM([{DISTINCT|ALL}])
443 返回選擇列表項(xiàng)目的數(shù)值的總和。
444
445 VARIANCE([{DISTINCT|ALL}])
446 返回選擇列表項(xiàng)目的統(tǒng)計(jì)方差。
447
448 用GROUP BY給數(shù)據(jù)分組
449
450 正如題目暗示的那樣組函數(shù)就是操作那些已經(jīng)分好組的數(shù)據(jù),我們告訴數(shù)據(jù)庫(kù)用GROUP BY怎樣給數(shù)據(jù)分組或者分類,當(dāng)我們?cè)赟ELECT語(yǔ)句的SELECT子句中使用組函數(shù)時(shí),我們必須把為分組或非常數(shù)列放置在GROUP BY子句中,如果沒(méi)有用group by進(jìn)行專門處理,那么缺省的分類是將整個(gè)結(jié)果設(shè)為一類。
451
452select stat,counter(*) zip_count from zip_codes GROUP BY state;
453
454ST ZIP_COUNT
455-- ---------
456AK 360
457AL 1212
458AR 1309
459AZ 768
460CA 3982
461
462 在這個(gè)例子中,我們用state字段分類;如果我們要將結(jié)果按照zip_codes排序,可以用ORDER BY語(yǔ)句,ORDER BY子句可以使用列或組函數(shù)。
463
464sel
上一頁(yè) [1] [2] [3] [4] 下一頁(yè)
正在看的ORACLE教程是:OraclePL/SQL單行函數(shù)和組函數(shù)詳解。ect stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;465
466ST COUNT(*)
467-- --------
468NY 4312
469PA 4297
470TX 4123
471CA 3982
472
473 用HAVING子句限制分組數(shù)據(jù)
474
475 現(xiàn)在你已經(jīng)知道了在查詢的SELECT語(yǔ)句和ORDER BY子句中使用主函數(shù),組函數(shù)只能用于兩個(gè)子串中,組函數(shù)不能用于WHERE子串中,例如下面的查詢是錯(cuò)誤的 :
476
477錯(cuò)誤
478SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
479
480
481 這個(gè)語(yǔ)句中數(shù)據(jù)庫(kù)不知道SUM()是什么,當(dāng)我們需要指示數(shù)據(jù)庫(kù)對(duì)行分組,然后限制分組后的行的輸出時(shí),正確的方法是使用HAVING語(yǔ)句:
482
483SELECT sales_clerk,SUN(sale_amount)
484FROM gross_sales
485WHERE sales_dept='OUTSIDE'
486GROUP BY sales_clerk
487HAVING SUM(sale_amount)>10000;
488
489 嵌套函數(shù)
490
491 函數(shù)可以嵌套。一個(gè)函數(shù)的輸出可以是另一個(gè)函數(shù)的輸入。操作數(shù)有一個(gè)可繼承的執(zhí)行過(guò)程。但函數(shù)的優(yōu)先權(quán)只是基于位置,函數(shù)遵循由內(nèi)到外,由左到右的原則。嵌套技術(shù)一般用于象DECODE這樣的能被用于邏輯判斷語(yǔ)句IF.THENELSE的函數(shù)。
492
493 嵌套函數(shù)可以包括在組函數(shù)中嵌套單行函數(shù),或者組函數(shù)嵌套入單行函數(shù)或組函數(shù)中。比如下面的例子:
494
495SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,
496COUNT(DISTINCT job) jobs,
497COUNT(DISTINCT mgr) mgrs
498FROM emp
499GROUP BY deptno;
500
501DEPTNO CNT JOBS MGRS
502------ --- ---- ----
50310 4 4 2
50420 4 3 4
50530 3 3 2
上一頁(yè)
相關(guān)文章
Oracle數(shù)據(jù)庫(kù)部分遷至閃存存儲(chǔ)的實(shí)現(xiàn)方法
下面小編就為大家分享一篇Oracle數(shù)據(jù)庫(kù)部分遷至閃存存儲(chǔ)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12Oracle的SYS_GUID()函數(shù)用法及說(shuō)明
這篇文章主要介紹了Oracle的SYS_GUID()函數(shù)用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Oracle字符函數(shù)應(yīng)用檢測(cè)漢字的方法
這篇文章主要介紹了Oracle字符函數(shù)應(yīng)用檢測(cè)漢字的方法,需要的朋友可以參考下2017-03-03Oracle執(zhí)行Update語(yǔ)句的幾種方式
這篇文章介紹了Oracle執(zhí)行Update語(yǔ)句的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Windows 64位下裝安裝Oracle 11g,PLSQL Developer的配置問(wèn)題,數(shù)據(jù)庫(kù)顯示空白的完美解決方
安裝pl sql 后,若下圖的數(shù)據(jù)庫(kù)處為空。則需要安裝32位的客戶端,說(shuō)明pl sql不支持64位客戶端連接。下面通過(guò)本文給大家介紹Windows 64位下裝Oracle 11g,PLSQL Developer的配置問(wèn)題,數(shù)據(jù)庫(kù)處顯示為空白的解決方案,需要的朋友可以參考下2016-11-11Oracle數(shù)據(jù)庫(kù)表被鎖如何查詢和解鎖詳解
作為一個(gè)IT技術(shù)人員,可能經(jīng)常遇到在使用Oracle數(shù)據(jù)時(shí),由于操作不當(dāng)導(dǎo)致數(shù)據(jù)庫(kù)鎖表,從而影響項(xiàng)目正常使用,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)表被鎖如何查詢和解鎖的相關(guān)資料,需要的朋友可以參考下2023-03-03