10-function.md 39.5 KB
Newer Older
1
---
2
title: Functions
3
toc_max_heading_level: 4
4 5
---

6
## Single-Row Functions
7

8
Single-Row functions return a result row for each row in the query result.
9

10
### Numeric Functions
11

12
#### ABS
13

14 15 16
```sql
SELECT ABS(field_name) FROM { tb_name | stb_name } [WHERE clause]
```
17

18
**Description**: The absolute value of a specific field.
19

20
**Return value type**: Same as input type.
21

22
**Applicable data types**: Numeric types.
23

24
**Applicable table types**: table, STable.
25

26
**Applicable nested query**: Inner query and Outer query.
27

28
**More explanations**:
29
- Cannot be used with aggregate functions.
30

31
#### ACOS
32

33 34
```sql
SELECT ACOS(field_name) FROM { tb_name | stb_name } [WHERE clause]
35 36
```

37
**Description**: The anti-cosine of a specific field.
38

39
**Return value type**: DOUBLE.
40

41
**Applicable data types**: Numeric types.
42

43
**Applicable table types**: table, STable.
44

45
**Applicable nested query**: Inner query and Outer query.
46

47
**More explanations**:
48
- Cannot be used with aggregate functions.
49

50
#### ASIN
51

52 53
```sql
SELECT ASIN(field_name) FROM { tb_name | stb_name } [WHERE clause]
54 55
```

56
**Description**: The anti-sine of a specific field.
57

58
**Return value type**: DOUBLE.
59

60
**Applicable data types**: Numeric types.
61

S
Sean Ely 已提交
62
**Applicable table types**: table, STable
63

64
**Applicable nested query**: Inner query and Outer query.
65

66
**More explanations**:
67
- Cannot be used with aggregate functions.
68

69
#### ATAN
70

71 72
```sql
SELECT ATAN(field_name) FROM { tb_name | stb_name } [WHERE clause]
73 74
```

75
**Description**: anti-tangent of a specific field.
76

77
**Return value type**: DOUBLE.
78 79

**Applicable data types**: Numeric types.
80

S
Sean Ely 已提交
81
**Applicable table types**: table, STable
82

83
**Applicable nested query**: Inner query and Outer query.
84

85
**More explanations**:
86
- Cannot be used with aggregate functions.
87

88
#### CEIL
89 90

```
91
SELECT CEIL(field_name) FROM { tb_name | stb_name } [WHERE clause];
92 93
```

94
**Description**: The rounded up value of a specific field.
95

96
**Return value type**: Same as input type.
97

98
**Applicable data types**: Numeric types.
99

S
Sean Ely 已提交
100
**Applicable table types**: table, STable
101

102
**Applicable nested query**: Inner query and outer query.
103

104
**More explanations**:
105
- Can't be used with aggregate functions.
106

107
#### COS
108

109 110
```sql
SELECT COS(field_name) FROM { tb_name | stb_name } [WHERE clause]
111 112
```

113
**Description**: The cosine of a specific field.
114

115
**Return value type**: DOUBLE.
116 117 118

**Applicable data types**: Numeric types.

119
**Applicable table types**: table, STable.
120

121
**Applicable nested query**: Inner query and Outer query.
122 123

**More explanations**:
124
- Can't be used with aggregate functions.
125

126
#### FLOOR
127 128

```
129
SELECT FLOOR(field_name) FROM { tb_name | stb_name } [WHERE clause];
130 131
```

132
**Description**: The rounded down value of a specific field.
133

134
**More explanations**: Refer to `CEIL` function for usage restrictions.
135 136 137 138 139

#### LOG

```sql
SELECT LOG(field_name, base) FROM { tb_name | stb_name } [WHERE clause]
140 141
```

142
**Description**: The logarithm of a specific field with `base` as the radix. If `base` parameter is ignored, natural logarithm of the field is returned.
143

144
**Return value type**: DOUBLE.
145

146
**Applicable data types**: Numeric types.
147

148
**Applicable table types**: table, STable.
149

150
**Applicable nested query**: Inner query and Outer query.
151

152 153
**More explanations**:
- Can't be used with aggregate functions
154

155
#### POW
156

157 158 159
```sql
SELECT POW(field_name, power) FROM { tb_name | stb_name } [WHERE clause]
```
160

161
**Description**: The power of a specific field with `power` as the index.
162

163
**Return value type**: DOUBLE.
164

165
**Applicable data types**: Numeric types.
166

167
**Applicable table types**: table, STable.
168

169
**Applicable nested query**: Inner query and Outer query.
170

171
**More explanations**:
172
- Can't be used with aggregate functions.
173

174
#### ROUND
175 176

```
177
SELECT ROUND(field_name) FROM { tb_name | stb_name } [WHERE clause];
178 179
```

180
**Description**: The rounded value of a specific field.
181

182
**More explanations**: Refer to `CEIL` function for usage restrictions.
183

184
#### SIN
185

186 187 188
```sql
SELECT SIN(field_name) FROM { tb_name | stb_name } [WHERE clause]
```
189

190
**Description**: The sine of a specific field.
191

192
**Description**: The anti-cosine of a specific field.
193

194
**Return value type**: DOUBLE.
195

196
**Applicable data types**: Numeric types.
197

198
**Applicable table types**: table, STable.
199

200
**Applicable nested query**: Inner query and Outer query.
201

202
**More explanations**:
203
- Can't be used with aggregate functions.
204

205
#### SQRT
206

207 208 209
```sql
SELECT SQRT(field_name) FROM { tb_name | stb_name } [WHERE clause]
```
210

211
**Description**: The square root of a specific field.
212

213
**Return value type**: DOUBLE.
214

215
**Applicable data types**: Numeric types.
G
gccgdb1234 已提交
216

217
**Applicable table types**: table, STable.
G
gccgdb1234 已提交
218

219
**Applicable nested query**: Inner query and Outer query.
220

221
**More explanations**:
222
- Can't be used with aggregate functions.
G
gccgdb1234 已提交
223

224
#### TAN
225

226 227
```sql
SELECT TAN(field_name) FROM { tb_name | stb_name } [WHERE clause]
228 229
```

230
**Description**: The tangent of a specific field.
G
gccgdb1234 已提交
231

232
**Description**: The anti-cosine of a specific field.
G
gccgdb1234 已提交
233

234
**Return value type**: DOUBLE.
G
gccgdb1234 已提交
235

236
**Applicable data types**: Numeric types.
G
gccgdb1234 已提交
237

238
**Applicable table types**: table, STable.
G
gccgdb1234 已提交
239

240
**Applicable nested query**: Inner query and Outer query.
G
gccgdb1234 已提交
241

242
**More explanations**:
243
- Can't be used with aggregate functions.
G
gccgdb1234 已提交
244

245
### String Functions
246

247
String functiosn take strings as input and output numbers or strings.
248

249
#### CHAR_LENGTH
250 251

```
252
SELECT CHAR_LENGTH(str|column) FROM { tb_name | stb_name } [WHERE clause]
253 254
```

255
**Description**: The mumber of characters of a string.
256

257
**Return value type**: INTEGER.
258

259
**Applicable data types**: VARCHAR, NCHAR.
260

261
**Applicable table types**: table, STable.
262

263
**Applicable nested query**: Inner query and Outer query.
264 265


266
#### CONCAT
267

268 269
```sql
SELECT CONCAT(str1|column1, str2|column2, ...) FROM { tb_name | stb_name } [WHERE clause]
270 271
```

272
**Description**: The concatenation result of two or more strings.
273

274
**Return value type**: If all input strings are VARCHAR type, the result is VARCHAR type too. If any one of input strings is NCHAR type, then the result is NCHAR. If input strings contain NULL value, the result is NULL. 
275

G
Ganlin Zhao 已提交
276
**Applicable data types**: VARCHAR, NCHAR.  At least 2 input strings are required, and at most 8 input strings are allowed. 
277

278 279 280
**Applicable table types**: table, STable.

**Applicable nested query**: Inner query and Outer query.
281 282


283
#### CONCAT_WS
284 285

```
286
SELECT CONCAT_WS(separator, str1|column1, str2|column2, ...) FROM { tb_name | stb_name } [WHERE clause]
287 288
```

289
**Description**: The concatenation result of two or more strings with separator.
290

291
**Return value type**: If all input strings are VARCHAR type, the result is VARCHAR type too. If any one of input strings is NCHAR type, then the result is NCHAR. If input strings contain NULL value, the result is NULL. 
292

G
Ganlin Zhao 已提交
293
**Applicable data types**: VARCHAR, NCHAR. At least 3 input strings are required, and at most 9 input strings are allowed. 
294

295
**Applicable table types**: table, STable.
296

297
**Applicable nested query**: Inner query and Outer query.
298 299


300
#### LENGTH
301 302

```
303
SELECT LENGTH(str|column) FROM { tb_name | stb_name } [WHERE clause]
304 305
```

306
**Description**: The length in bytes of a string.
307

308
**Return value type**: INTEGER.
309

310
**Applicable data types**: VARCHAR, NCHAR.
311

312
**Applicable table types**: table, STable.
313

314
**Applicable nested query**: Inner query and Outer query.
315 316


317
#### LOWER
318 319

```
320
SELECT LOWER(str|column) FROM { tb_name | stb_name } [WHERE clause]
321 322
```

323
**Description**: Convert the input string to lower case.
324

325
**Return value type**: Same as input type.
326

327
**Applicable data types**: VARCHAR, NCHAR.
328

329
**Applicable table types**: table, STable.
330

331
**Applicable nested query**: Inner query and Outer query.
332 333


334
#### LTRIM
335 336

```
337
SELECT LTRIM(str|column) FROM { tb_name | stb_name } [WHERE clause]
338 339
```

340
**Description**: Remove the left leading blanks of a string.
341

342
**Return value type**: Same as input type.
343

344
**Applicable data types**: VARCHAR, NCHAR.
345

346
**Applicable table types**: table, STable.
347

348
**Applicable nested query**: Inner query and Outer query.
349 350


351
#### RTRIM
352 353

```
354
SELECT RTRIM(str|column) FROM { tb_name | stb_name } [WHERE clause]
355 356
```

357
**Description**: Remove the right tailing blanks of a string.
358

359
**Return value type**: Same as input type.
360

361
**Applicable data types**: VARCHAR, NCHAR.
362

363
**Applicable table types**: table, STable.
364

365
**Applicable nested query**: Inner query and Outer query.
366 367


368
#### SUBSTR
369 370

```
371
SELECT SUBSTR(str,pos[,len]) FROM { tb_name | stb_name } [WHERE clause]
372 373
```

374
**Description**: The sub-string starting from `pos` with length of `len` from the original string `str`.
375

376
**Return value type**: Same as input type.
377

378
**Applicable data types**: VARCHAR, NCHAR.
379

380
**Applicable table types**: table, STable.
381

382
**Applicable nested query**: Inner query and Outer query.
383

384
**More explanations**:
385

386 387
- If the input is NULL, the output is NULL
- Parameter `pos` can be an positive or negative integer; If it's positive, the starting position will be counted from the beginning of the string; if it's negative, the starting position will be counted from the end of the string.
388
- If `len` is not specified, it means from `pos` to the end of string.
389

390
#### UPPER
391 392

```
393
SELECT UPPER(str|column) FROM { tb_name | stb_name } [WHERE clause]
394 395
```

396
**Description**: Convert the input string to upper case.
397

398
**Return value type**: Same as input type.
399

400
**Applicable data types**: VARCHAR, NCHAR.
401

402
**Applicable table types**: table, STable.
403

404
**Applicable nested query**: Inner query and Outer query.
405 406


407
### Conversion Functions
408

409
Conversion functions convert from one data type to another.
410

411
#### CAST
412

413 414
```sql
SELECT CAST(expression AS type_name) FROM { tb_name | stb_name } [WHERE clause]
415 416
```

417
**Description**: Used for type casting. Convert `expression` to the type specified by `type_name`.
418

419
**Return value type**: The type specified by parameter `type_name`.
420

421
**Applicable data types**: `expression` can be any data type except for JSON.
422

423
**More explanations**:
424

425
- Error will be reported for unsupported type casting.
426
- Some values of some supported data types may not be casted, below are known issues:
G
gccgdb1234 已提交
427
  1)When casting VARCHAR/NCHAR to BIGINT/BIGINT UNSIGNED, some characters may be treated as illegal, for example "a" may be converted to 0.
428 429
  2)When casting to numeric type, if converted result is out of range the destination data type can hold, overflow may occur and casting behavior is undefined.
  3) When casting to VARCHAR/NCHAR type, if converted string length exceeds the length specified in `type_name`, the result will be truncated. (e.g. CAST("abcd" as BINARY(2)) will return string "ab").
430

431
#### TO_ISO8601
432

433
```sql
434
SELECT TO_ISO8601(ts[, timezone]) FROM { tb_name | stb_name } [WHERE clause];
435 436
```

437
**Description**: The ISO8601 date/time format converted from a UNIX timestamp, with timezone attached. `timezone` parameter allows attaching any customized timezone string to the output format. If `timezone` parameter is not specified, the timezone information of client side system will be attached.
438

439
**Return value type**: VARCHAR.
440

441
**Applicable data types**: INTEGER, TIMESTAMP.
442

443
**Applicable table types**: table, STable.
444

445
**More explanations**:
446

447 448
- If the input is INTEGER represents UNIX timestamp, the precision of the returned value is determined by the digits of the input integer.
- If the input is of TIMESTAMP type, The precision of the returned value is same as the precision set for the current database in use.
449

450
#### TO_JSON
451

452 453
```sql
SELECT TO_JSON(str_literal) FROM { tb_name | stb_name } [WHERE clause];
454 455
```

456
**Description**: Convert a JSON string to a JSON body.
457

458
**Return value type**: JSON.
459

460
**Applicable data types**: JSON string, in the format like '{ "literal" : literal }'. '{}' is NULL value. keys in the string must be string constants, values can be constants of numeric types, bool, string or NULL. Escaping characters are not allowed in the JSON string.
461

462
**Applicable table types**: table, STable.
463

464
**Applicable nested query**: Inner query and Outer query.
465

466
#### TO_UNIXTIMESTAMP
467

468 469
```sql
SELECT TO_UNIXTIMESTAMP(datetime_string | ts_col) FROM { tb_name | stb_name } [WHERE clause];
470 471
```

472
**Description**: UNIX timestamp converted from a string of date/time format.
473

474
**Return value type**: BIGINT.
475

476
**Applicable data types**: VARCHAR, NCHAR.
477

478
**Applicable table types**: table, STable.
479

480
**More explanations**:
481

482 483
- The input string must be compatible with ISO8601/RFC3339 standard, NULL will be returned if the string cannot be converted.
- The precision of the returned timestamp is same as the precision set for the current database in use.
484

485
### DateTime Functions
486

487
DateTime functions applied to timestamp data. NOW(), TODAY() and TIMEZONE() are executed only once even though they may occur multiple times in a single SQL statement.
488

489
#### NOW
490

491 492 493 494 495
```sql
SELECT NOW() FROM { tb_name | stb_name } [WHERE clause];
SELECT select_expr FROM { tb_name | stb_name } WHERE ts_col cond_operatior NOW();
INSERT INTO tb_name VALUES (NOW(), ...);
```
496

497
**Description**: The current time of the client side system.
498

499
**Return value type**: TIMESTAMP.
500

501
**Applicable data types**: TIMESTAMP only if used in WHERE/INSERT clause.
502

503
**Applicable table types**: table, STable.
504

505
**More explanations**:
506

507 508 509
- Addition and Subtraction operation with time duration can be performed, for example NOW() + 1s, the time unit can be one of the followings:
  b(nanosecond), u(microsecond), a(millisecond)), s(second), m(minute), h(hour), d(day), w(week).
- The precision of the returned timestamp is same as the precision set for the current database in use.
510

511 512 513
#### TIMEDIFF

```sql
514
SELECT TIMEDIFF(ts1 | datetime_string1, ts2 | datetime_string2 [, time_unit]) FROM { tb_name | stb_name } [WHERE clause];
515 516
```

517
**Description**: The difference(duration) between two timestamps, and rounded to the time unit specified by `time_unit`.
518

519
**Return value type**: BIGINT.
520

521
**Applicable data types**: INTEGER/TIMESTAMP represents UNIX timestamp, or VARCHAR/NCHAR string in date/time format.
522

523
**Applicable table types**: table, STable.
524 525 526

**More explanations**:

527
- Time unit specified by `time_unit` can be:
528 529
  1b(nanosecond), 1u(microsecond),1a(millisecond),1s(second),1m(minute),1h(hour),1d(day),1w(week).
- If `time_unit` parameter is not specified, the precision of the returned time duration is same as the precision set for the current database in use.
G
Ganlin Zhao 已提交
530
- If input date-time string cannot be converted to UNIX timestamp, NULL value is returned.
531

532
#### TIMETRUNCATE
533 534

```sql
535
SELECT TIMETRUNCATE(ts_val | datetime_string | ts_col, time_unit) FROM { tb_name | stb_name } [WHERE clause];
536 537
```

538
**Description**: Truncate the input timestamp with unit specified by `time_unit`.
539

540
**Return value type**: TIMESTAMP.
541

542
**Applicable data types**: INTEGER/TIMESTAMP represents UNIX timestamp, or VARCHAR/NCHAR string in date/time format.
543

544
**Applicable table types**: table, STable.
545 546 547

**More explanations**:

548
- Time unit specified by `time_unit` can be:
549 550
  1b(nanosecond),1u(microsecond),1a(millisecond),1s(second),1m(minute),1h(hour),1d(day),1w(week).
- The precision of the returned timestamp is same as the precision set for the current database in use.
G
Ganlin Zhao 已提交
551
- If input date-time string cannot be converted to UNIX timestamp, NULL value is returned.
552

553
#### TIMEZONE
554 555

```sql
556
SELECT TIMEZONE() FROM { tb_name | stb_name } [WHERE clause];
557 558
```

559
**Description**: The timezone of the client side system.
560

561
**Return value type**: VARCHAR.
562

563
**Applicable data types**: None.
564

565
**Applicable table types**: table, STable.
566

567
#### TODAY
568

569 570 571 572
```sql
SELECT TODAY() FROM { tb_name | stb_name } [WHERE clause];
SELECT select_expr FROM { tb_name | stb_name } WHERE ts_col cond_operatior TODAY()];
INSERT INTO tb_name VALUES (TODAY(), ...);
573 574
```

575
**Description**: The timestamp of 00:00:00 of the client side system.
576

577
**Return value type**: TIMESTAMP.
578

579
**Applicable data types**: TIMESTAMP only if used in WHERE/INSERT clause.
580

581
**Applicable table types**: table, STable.
582

583
**More explanations**:
584

585 586 587
- Addition and Subtraction operation can be performed with time durations, for example NOW() + 1s, the time unit can be:
  b(nanosecond), u(microsecond), a(millisecond)), s(second), m(minute), h(hour), d(day), w(week).
- The precision of the returned timestamp is same as the precision set for the current database in use.
588

589
## Aggregate Functions
590

591
Aggregate functions return single result row for each group in the query result set. Groups are determined by `GROUP BY` clause or time window clause if they are used; or the whole result is considered a group if neither of them is used.
592

G
Ganlin Zhao 已提交
593 594 595 596 597 598 599 600 601 602 603
### APERCENTILE

```
SELECT APERCENTILE(field_name, P[, algo_type])
FROM { tb_name | stb_name } [WHERE clause]
```

**Description**: Similar to `PERCENTILE`, but a approximated result is returned.

**Return value type**: DOUBLE.

G
Ganlin Zhao 已提交
604
**Applicable data types**: Numeric types.
G
Ganlin Zhao 已提交
605 606 607 608 609 610 611 612 613 614 615

**Applicable table types**: table, STable.

**More explanations**

- _P_ is in range [0,100], when _P_ is 0, the result is same as using function MIN; when _P_ is 100, the result is same as function MAX.
- **algo_type** can only be input as `default` or `t-digest`, if it's not specified `default` will be used, i.e. `apercentile(column_name, 50)` is same as `apercentile(column_name, 50, "default")`.
- If `default` is used, histogram based algorithm is used for calculation. If `t-digest` is used, `t-digest` sampling algorithm is used to calculate the result.

**Nested query**: It can be used in both the outer query and inner query in a nested query.

616
### AVG
617 618

```
619
SELECT AVG(field_name) FROM tb_name [WHERE clause];
620 621
```

622
**Description**: Get the average value of a column in a table or STable.
623

624
**Return value type**: DOUBLE.
625

626
**Applicable data types**: Numeric type.
627

628
**Applicable table types**: table, STable.
629

630
### COUNT
631 632

```
633
SELECT COUNT([*|field_name]) FROM tb_name [WHERE clause];
634 635
```

636
**Description**: Get the number of rows in a table or a super table.
637

638
**Return value type**: BIGINT.
639

640
**Applicable data types**: All data types.
641

642
**Applicable table types**: table, STable.
643

644
**More explanation**:
645

646
- Wildcard (\*) is used to represent all columns. If \* used `COUNT` function will get the total number of all rows.
647
- The number of non-NULL values will be returned if this function is used on a specific column.
648

649
### ELAPSED
650

651 652
```mysql
SELECT ELAPSED(field_name[, time_unit]) FROM { tb_name | stb_name } [WHERE clause] [INTERVAL(interval [, offset]) [SLIDING sliding]];
653 654
```

655
**Description**`elapsed` function can be used to calculate the continuous time length in which there is valid data. If it's used with `INTERVAL` clause, the returned result is the calcualted time length within each time window. If it's used without `INTERVAL` caluse, the returned result is the calculated time duration within the specified time range. Please be noted that the calculated time duration is in the specified `time_unit`.
656

657
**Return value type**:DOUBLE.
658

G
Ganlin Zhao 已提交
659
**Applicable data type**:TIMESTAMP.
660

661
**Applicable tables**: table, STable, outter in nested query.
662

663
**Explanations**
664

665 666 667 668 669 670 671
- `field_name` parameter can only be the first column of a table, i.e. timestamp primary key.
- The minimum value of `time_unit` is the time precision of the database. If `time_unit` is not specified, the time precision of the database is used as the default ime unit.
- It can be used with `INTERVAL` to get the time valid time length of each time window. Please be noted that the return value is same as the time window for all time windows except for the first and the last time window.
- `order by asc/desc` has no effect on the result.
- `group by tbname` must be used together when `elapsed` is used against a STable.
- `group by` must NOT be used together when `elapsed` is used against a table or sub table.
- When used in nested query, it's only applicable when the inner query outputs an implicit timestamp column as the primary key. For example, `select elapsed(ts) from (select diff(value) from sub1)` is legal usage while `select elapsed(ts) from (select * from sub1)` is not.
672
- It cannot be used with `leastsquares`, `diff`, `derivative`, `top`, `bottom`, `last_row`, `interp`.
673

674
### LEASTSQUARES
675

676 677 678
```
SELECT LEASTSQUARES(field_name, start_val, step_val) FROM tb_name [WHERE clause];
```
679

680
**Description**: The linear regression function of the specified column and the timestamp column (primary key), `start_val` is the initial value and `step_val` is the step value.
681

682
**Return value type**: VARCHAR string in the format of "(slope, intercept)".
683

684 685 686
**Applicable data types**: Numeric types.

**Applicable table types**: table only.
687

688
### SPREAD
689

690 691
```
SELECT SPREAD(field_name) FROM { tb_name | stb_name } [WHERE clause];
692 693
```

694
**Description**: The difference between the max and the min value of a specific column.
695

696
**Return value type**: DOUBLE.
697

G
Ganlin Zhao 已提交
698
**Applicable data types**: Numeric types.
699

700
**Applicable table types**: table, STable.
701

702
**More explanations**: Can be used on a column of TIMESTAMP type, the result time unit precision is same as the current database in use.
703

704
### STDDEV
705

706 707
```
SELECT STDDEV(field_name) FROM tb_name [WHERE clause];
708 709
```

710
**Description**: Standard deviation of a specific column in a table or STable.
711

712
**Return value type**: DOUBLE.
713

G
Ganlin Zhao 已提交
714
**Applicable data types**: Numeric types.
715

716
**Applicable table types**: table, STable.
717

718
### SUM
719

720 721 722
```
SELECT SUM(field_name) FROM tb_name [WHERE clause];
```
723

724
**Description**: The summation of values of a specific column in a table or STable.
725

726
**Return value type**: DOUBLE.
727

G
Ganlin Zhao 已提交
728
**Applicable data types**: Numeric types.
729

730
**Applicable table types**: table, STable.
731

732
### HYPERLOGLOG
733

734 735 736
```
SELECT HYPERLOGLOG(field_name) FROM { tb_name | stb_name } [WHERE clause];
```
737

738
**Description**:The cardinal number of a specific column is returned by using hyperloglog algorithm.
739

740
**Return value type**: INTEGER.
741

G
Ganlin Zhao 已提交
742
**Applicable data types**: All data types.
743

744
**More explanations**: The benefit of using hyperloglog algorithm is that the memory usage is under control when the data volume is huge. However, when the data volume is very small, the result may be not accurate, it's recommented to use `select count(data) from (select unique(col) as data from table)` in this case.
745

746
### HISTOGRAM
747

748 749 750
```
SELECT HISTOGRAM(field_name,bin_type, bin_description, normalized) FROM tb_name [WHERE clause];
```
751

752
**Description**:Returns count of data points in user-specified ranges.
753

754
**Return value type**:DOUBLE or BIGINT, depends on normalized parameter settings.
755

G
Ganlin Zhao 已提交
756
**Applicable data type**:Numerical types.
757

758
**Applicable table types**: table, STable.
759

760
**Explanations**
761

G
Ganlin Zhao 已提交
762 763
- bin_type: parameter to indicate the bucket type, valid inputs are: "user_input", "linear_bin", "log_bin"。
- bin_description: parameter to describe the rule to generate buckets,can be in the following JSON formats for each bin_type respectively:
764

765
   - "user_input": "[1, 3, 5, 7]": User specified bin values.
766

767 768 769 770 771 772
   - "linear_bin": "{"start": 0.0, "width": 5.0, "count": 5, "infinity": true}"
     "start" - bin starting point.
     "width" - bin offset.
     "count" - number of bins generated.
     "infinity" - whether to add(-inf, inf)as start/end point in generated set of bins.
     The above "linear_bin" descriptor generates a set of bins: [-inf, 0.0, 5.0, 10.0, 15.0, 20.0, +inf].
773

774 775 776 777 778 779
   - "log_bin": "{"start":1.0, "factor": 2.0, "count": 5, "infinity": true}"
     "start" - bin starting point.
     "factor" - exponential factor of bin offset.
     "count" - number of bins generated.
     "infinity" - whether to add(-inf, inf)as start/end point in generated range of bins.
     The above "log_bin" descriptor generates a set of bins:[-inf, 1.0, 2.0, 4.0, 8.0, 16.0, +inf].
780

G
Ganlin Zhao 已提交
781
- normalized: setting to 1/0 to turn on/off result normalization.
782

G
Ganlin Zhao 已提交
783
### PERCENTILE
784

785
```
G
Ganlin Zhao 已提交
786
SELECT PERCENTILE(field_name, P) FROM { tb_name } [WHERE clause];
787
```
788

G
Ganlin Zhao 已提交
789
**Description**: The value whose rank in a specific column matches the specified percentage. If such a value matching the specified percentage doesn't exist in the column, an interpolation value will be returned.
790

791
**Return value type**: DOUBLE.
792

G
Ganlin Zhao 已提交
793
**Applicable data types**: Numeric types.
794

G
Ganlin Zhao 已提交
795
**Applicable table types**: table.
796

G
Ganlin Zhao 已提交
797
**More explanations**: _P_ is in range [0,100], when _P_ is 0, the result is same as using function MIN; when _P_ is 100, the result is same as function MAX.
798

G
Ganlin Zhao 已提交
799
## Selector Functions
800

G
Ganlin Zhao 已提交
801
Selector functiosn choose one or more rows in the query result according to the semantics. You can specify to output primary timestamp column and other columns including tbname and tags so that you can easily know which rows the selected values belong to.
802

803
### BOTTOM
804

805 806
```
SELECT BOTTOM(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
807 808
```

809
**Description**: The least _k_ values of a specific column in a table or STable. If a value has multiple occurrences in the column but counting all of them in will exceed the upper limit _k_, then a part of them will be returned randomly.
810

811
**Return value type**: Same as the column being operated upon.
812

G
Ganlin Zhao 已提交
813
**Applicable data types**: Numeric types.
814

815
**Applicable table types**: table, STable.
816 817 818

**More explanations**:

819 820 821
- _k_ must be in range [1,100].
- The timestamp associated with the selected values are returned too.
- Can't be used with `FILL`.
822

823
### FIRST
824

825 826
```
SELECT FIRST(field_name) FROM { tb_name | stb_name } [WHERE clause];
827 828
```

829
**Description**: The first non-null value of a specific column in a table or STable.
830

831
**Return value type**: Same as the column being operated upon.
832

G
Ganlin Zhao 已提交
833
**Applicable data types**: All data types.
834

835
**Applicable table types**: table, STable.
836 837 838

**More explanations**:

839 840 841
- FIRST(\*) can be used to get the first non-null value of all columns
- NULL will be returned if all the values of the specified column are all NULL
- A result will NOT be returned if all the columns in the result set are all NULL
842

843
### INTERP
844

845 846
```
SELECT INTERP(field_name) FROM { tb_name | stb_name } [WHERE where_condition] [ RANGE(timestamp1,timestamp2) ] [EVERY(interval)] [FILL ({ VALUE | PREV | NULL | LINEAR | NEXT})];
847 848
```

849
**Description**: The value that matches the specified timestamp range is returned, if existing; or an interpolation value is returned.
850

851
**Return value type**: Same as the column being operated upon.
852

G
Ganlin Zhao 已提交
853
**Applicable data types**: Numeric data types.
854

855
**Applicable table types**: table, STable, nested query.
856

857
**More explanations**
858

859 860 861 862 863 864 865
- `INTERP` is used to get the value that matches the specified time slice from a column. If no such value exists an interpolation value will be returned based on `FILL` parameter.
- The input data of `INTERP` is the value of the specified column and a `where` clause can be used to filter the original data. If no `where` condition is specified then all original data is the input.
- The output time range of `INTERP` is specified by `RANGE(timestamp1,timestamp2)` parameter, with timestamp1<=timestamp2. timestamp1 is the starting point of the output time range and must be specified. timestamp2 is the ending point of the output time range and must be specified. If `RANGE` is not specified, then the timestamp of the first row that matches the filter condition is treated as timestamp1, the timestamp of the last row that matches the filter condition is treated as timestamp2.
- The number of rows in the result set of `INTERP` is determined by the parameter `EVERY`. Starting from timestamp1, one interpolation is performed for every time interval specified `EVERY` parameter. If `EVERY` parameter is not used, the time windows will be considered as no ending timestamp, i.e. there is only one time window from timestamp1.
- Interpolation is performed based on `FILL` parameter. No interpolation is performed if `FILL` is not used, that means either the original data that matches is returned or nothing is returned.
- `INTERP` can only be used to interpolate in single timeline. So it must be used with `group by tbname` when it's used on a STable. It can't be used with `GROUP BY` when it's used in the inner query of a nested query.
- The result of `INTERP` is not influenced by `ORDER BY TIMESTAMP`, which impacts the output order only..
866

867
### LAST
868

869 870
```
SELECT LAST(field_name) FROM { tb_name | stb_name } [WHERE clause];
871 872
```

873
**Description**: The last non-NULL value of a specific column in a table or STable.
874

875
**Return value type**: Same as the column being operated upon.
876

G
Ganlin Zhao 已提交
877
**Applicable data types**: All data types.
878

879
**Applicable table types**: table, STable.
880 881 882

**More explanations**:

883 884 885
- LAST(\*) can be used to get the last non-NULL value of all columns
- If the values of a column in the result set are all NULL, NULL is returned for that column; if all columns in the result are all NULL, no result will be returned.
- When it's used on a STable, if there are multiple values with the timestamp in the result set, one of them will be returned randomly and it's not guaranteed that the same value is returned if the same query is run multiple times.
886

887
### LAST_ROW
888

889 890
```
SELECT LAST_ROW(field_name) FROM { tb_name | stb_name };
891 892
```

893
**Description**: The last row of a table or STable.
894

895
**Return value type**: Same as the column being operated upon.
896

G
Ganlin Zhao 已提交
897
**Applicable data types**: All data type.
898

899
**Applicable table types**: table, STable.
900 901 902

**More explanations**:

903
- When it's used against a STable, multiple rows with the same and largest timestamp may exist, in this case one of them is returned randomly and it's not guaranteed that the result is same if the query is run multiple times.
904
- Cannot be used with `INTERVAL`.
905

906
### MAX
907

908 909
```
SELECT MAX(field_name) FROM { tb_name | stb_name } [WHERE clause];
910 911
```

912
**Description**: The maximum value of a specific column of a table or STable.
913

914
**Return value type**: Same as the data type of the column being operated upon.
915

G
Ganlin Zhao 已提交
916
**Applicable data types**: Numeric types.
917

918
**Applicable table types**: table, STable.
919

920
### MIN
921

922 923 924
```
SELECT MIN(field_name) FROM {tb_name | stb_name} [WHERE clause];
```
925

926
**Description**: The minimum value of a specific column in a table or STable.
927

928
**Return value type**: Same as the data type of the column being operated upon.
929

G
Ganlin Zhao 已提交
930
**Applicable data types**: Numeric types.
931

932
**Applicable table types**: table, STable.
933

G
Ganlin Zhao 已提交
934
### MODE
935

936
```
G
Ganlin Zhao 已提交
937
SELECT MODE(field_name) FROM tb_name [WHERE clause];
938
```
939

G
Ganlin Zhao 已提交
940
**Description**:The value which has the highest frequency of occurrence. NULL is returned if there are multiple values which have highest frequency of occurrence.
941

G
Ganlin Zhao 已提交
942
**Return value type**:Same as the data type of the column being operated upon.
943

G
Ganlin Zhao 已提交
944
**Applicable data types**: All data types.
945

G
Ganlin Zhao 已提交
946
**More explanations**:Considering the number of returned result set is unpredictable, it's suggested to limit the number of unique values to 100,000, otherwise error will be returned.
947

G
Ganlin Zhao 已提交
948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967
### SAMPLE

```sql
    SELECT SAMPLE(field_name, K) FROM { tb_name | stb_name } [WHERE clause]
```

**Description**: _k_ sampling values of a specific column. The applicable range of _k_ is [1,1000].

**Return value type**: Same as the column being operated.

**Applicable data types**: All data types.

**Applicable table types**: table, STable.

**Applicable nested query**: Inner query and Outer query.

**More explanations**:

- Arithmetic operation cannot be operated on the result of `SAMPLE` function
- Must be used with `Partition by tbname` when it's used on a STable to force the result on each single timeline.
968

969
### TAIL
970

971 972
```
SELECT TAIL(field_name, k, offset_val) FROM {tb_name | stb_name} [WHERE clause];
973 974
```

975
**Description**: The next _k_ rows are returned after skipping the last `offset_val` rows, NULL values are not ignored. `offset_val` is optional parameter. When it's not specified, the last _k_ rows are returned. When `offset_val` is used, the effect is same as `order by ts desc LIMIT k OFFSET offset_val`.
976

977
**Parameter value range**: k: [1,100] offset_val: [0,100].
978

979
**Return value type**: Same as the column being operated upon.
980

G
Ganlin Zhao 已提交
981
**Applicable data types**: All data types.
982

983
### TOP
984 985

```
986
SELECT TOP(field_name, K) FROM { tb_name | stb_name } [WHERE clause];
987 988
```

989
**Description**: The greatest _k_ values of a specific column in a table or STable. If a value has multiple occurrences in the column but counting all of them in will exceed the upper limit _k_, then a part of them will be returned randomly.
990

991
**Return value type**: Same as the column being operated upon.
992

G
Ganlin Zhao 已提交
993
**Applicable data types**: Numeric types.
994

995
**Applicable table types**: table, STable.
996 997 998

**More explanations**:

999 1000 1001
- _k_ must be in range [1,100].
- The timestamp associated with the selected values are returned too.
- Cannot be used with `FILL`.
1002

1003
### UNIQUE
1004 1005

```
1006
SELECT UNIQUE(field_name) FROM {tb_name | stb_name} [WHERE clause];
1007 1008
```

1009
**Description**: The values that occur the first time in the specified column. The effect is similar to `distinct` keyword, but it can also be used to match tags or timestamp.
1010

1011
**Return value type**: Same as the column or tag being operated upon.
1012

G
Ganlin Zhao 已提交
1013
**Applicable data types**: All data types.
1014

1015
**More explanations**:
1016

1017 1018
- It can be used against table or STable, but can't be used together with time window, like `interval`, `state_window` or `session_window` .
- Considering the number of result sets is unpredictable, it's suggested to limit the distinct values under 100,000 to control the memory usage, otherwise error will be returned.
1019

1020
## Time-Series Specific Functions
1021

1022
TDengine provides a set of time-series specific functions to better meet the requirements in querying time-series data. In general databases, similar functionalities can only be achieved with much more complex syntax and much worse performance. TDengine provides these functionalities in builtin functions so that the burden on user side is minimized.
1023

1024
### CSUM
1025

1026 1027
```sql
    SELECT CSUM(field_name) FROM { tb_name | stb_name } [WHERE clause]
1028 1029
```

1030
**Description**: The cumulative sum of each row for a specific column. The number of output rows is same as that of the input rows.
1031

1032
**Return value type**: BIGINT for signed integer input types; UNSIGNED BIGINT for unsigned integer input types; DOUBLE for floating point input types. 
1033

1034
**Applicable data types**: Numeric types.
1035

1036
**Applicable table types**: table, STable.
1037

1038
**Applicable nested query**: Inner query and Outer query.
1039

1040
**More explanations**:
1041 1042 1043
- Arithmetic operation cannot be performed on the result of `csum` function.
- Can only be used with aggregate functions.
- `Partition by tbname` must be used together on a STable to force the result on a single timeline.
1044

1045
### DERIVATIVE
1046 1047

```
1048
SELECT DERIVATIVE(field_name, time_interval, ignore_negative) FROM tb_name [WHERE clause];
1049 1050
```

1051
**Description**: The derivative of a specific column. The time rage can be specified by parameter `time_interval`, the minimum allowed time range is 1 second (1s); the value of `ignore_negative` can be 0 or 1, 1 means negative values are ignored.
1052

1053
**Return value type**: DOUBLE.
1054

G
Ganlin Zhao 已提交
1055
**Applicable data types**: Numeric types.
1056

1057
**Applicable table types**: table, STable.
1058

1059
**More explanations**:
1060

1061
- The number of result rows is the number of total rows in the time range subtracted by one, no output for the first row.
1062
- It can be used together with `PARTITION BY tbname` against a STable.
G
Ganlin Zhao 已提交
1063
- Can be used together with selection of relative columns. E.g. select \_rowts, DERIVATIVE() from.
1064

1065
### DIFF
1066

1067 1068
```sql
SELECT {DIFF(field_name, ignore_negative) | DIFF(field_name)} FROM tb_name [WHERE clause];
1069 1070
```

1071
**Description**: The different of each row with its previous row for a specific column. `ignore_negative` can be specified as 0 or 1, the default value is 1 if it's not specified. `1` means negative values are ignored.
1072

1073
**Return value type**: Same as the column being operated upon.
1074

G
Ganlin Zhao 已提交
1075
**Applicable data types**: Numeric types.
1076

1077
**Applicable table types**: table, STable.
1078

1079
**More explanations**:
1080

1081
- The number of result rows is the number of rows subtracted by one, no output for the first row.
G
Ganlin Zhao 已提交
1082
- It can be used on STable with `PARTITION by tbname`.
G
Ganlin Zhao 已提交
1083
- Can be used together with selection of relative columns. E.g. select \_rowts, DIFF() from.
1084

1085
### IRATE
1086 1087

```
1088
SELECT IRATE(field_name) FROM tb_name WHERE clause;
1089 1090
```

1091
**Description**: instantaneous rate on a specific column. The last two samples in the specified time range are used to calculate instantaneous rate. If the last sample value is smaller, then only the last sample value is used instead of the difference between the last two sample values.
1092

1093
**Return value type**: DOUBLE.
1094

G
Ganlin Zhao 已提交
1095
**Applicable data types**: Numeric types.
1096

1097
**Applicable table types**: table, STable.
1098

1099
**More explanations**:
1100

1101
- It can be used on stble with `PARTITION BY`, i.e. timelines generated by `PARTITION BY tbname` on a STable.
1102

1103
### MAVG
1104

1105 1106
```sql
    SELECT MAVG(field_name, K) FROM { tb_name | stb_name } [WHERE clause]
1107 1108
```

1109
**Description**: The moving average of continuous _k_ values of a specific column. If the number of input rows is less than _k_, nothing is returned. The applicable range of _k_ is [1,1000].
1110

1111
**Return value type**: DOUBLE.
1112

1113
**Applicable data types**: Numeric types.
1114

1115
**Applicable nested query**: Inner query and Outer query.
1116

1117
**Applicable table types**: table, STable.
1118

1119
**More explanations**:
1120

1121 1122 1123
- Arithmetic operation cannot be performed on the result of `MAVG`.
- Cannot be used with aggregate functions.
- Must be used with `PARTITION BY tbname` when it's used on a STable to force the result on each single timeline.
1124 1125 1126 1127 1128 1129 1130

### STATECOUNT

```
SELECT STATECOUNT(field_name, oper, val) FROM { tb_name | stb_name } [WHERE clause];
```

1131
**Description**: The number of continuous rows satisfying the specified conditions for a specific column. If the specified condition is evaluated as true, the number is increased by 1; otherwise the number is reset to -1. If the input value is NULL, then the corresponding row is skipped.
1132 1133 1134

**Applicable parameter values**:

1135 1136
- oper : Can be one of "LT" (lower than), "GT" (greater than), "LE" (lower than or euqal to), "GE" (greater than or equal to), "NE" (not equal to), "EQ" (equal to).
- val : Numeric types.
1137

1138
**Return value type**: INTEGER.
1139

1140
**Applicable data types**: Numeric types.
1141

1142
**Applicable table types**: table, STable.
1143

1144
**Applicable nested query**: Outer query only.
1145 1146 1147

**More explanations**:

1148 1149
- Must be used together with `PARTITION BY tbname` when it's used on a STable to force the result into each single timeline.
- Cannot be used with window operation, like interval/state_window/session_window.
1150 1151 1152 1153 1154 1155 1156

### STATEDURATION

```
SELECT stateDuration(field_name, oper, val, unit) FROM { tb_name | stb_name } [WHERE clause];
```

1157
**Description**: The length of time range in which all rows satisfy the specified condition for a specific column. The length for the first row that satisfies the condition is 0. Next, if the condition is evaluated as true for a row, the time interval between current row and its previous row is added up to the time range; otherwise the time range length is reset to -1. If the value of the column is NULL, the corresponding row is skipped.
1158 1159 1160

**Applicable parameter values**:

1161
- oper : Can be one of "LT" (lower than), "GT" (greater than), "LE" (lower than or euqal to), "GE" (greater than or equal to), "NE" (not equal to), "EQ" (equal to).
G
Ganlin Zhao 已提交
1162 1163
- val : Numeric types.
- unit : The unit of time interval, can be: 1b(nanosecond), 1u(microsecond),1a(millisecond),1s(second),1m(minute),1h(hour),1d(day),1w(week). If not specified, default is same as the current database time precision in use.
1164

1165
**Return value type**: INTEGER.
1166

1167
**Applicable data types**: Numeric types.
1168

1169
**Applicable table types**: table, STable.
1170

1171
**Applicable nested query**: Outer query only.
1172 1173 1174

**More explanations**:

G
Ganlin Zhao 已提交
1175 1176
- Must be used together with `PARTITION BY tbname` when it's used on a STable to force the result into each single timeline.
- Cannot be used with window operation, like interval/state_window/session_window.
1177

1178
### TWA
1179 1180

```
1181
SELECT TWA(field_name) FROM tb_name WHERE clause;
1182 1183
```

1184
**Description**: Time weighted average on a specific column within a time range.
1185

1186
**Return value type**: DOUBLE.
1187

G
Ganlin Zhao 已提交
1188
**Applicable data types**: Numeric types.
1189

1190
**Applicable table types**: table, STable.
1191 1192 1193

**More explanations**:

1194
- It can be used on stable with `PARTITION BY`, i.e. timelines generated by `PARTITION BY tbname` on a STable.
1195

1196
## System Information Functions
1197

1198
### DATABASE
1199 1200

```
1201
SELECT DATABASE();
1202 1203
```

1204
**Description**:Return the current database being used. If the user doesn't specify database when logon and doesn't use `USE` SQL command to switch the datbase, this function returns NULL.
1205

1206
### CLIENT_VERSION
1207 1208

```
1209
SELECT CLIENT_VERSION();
1210 1211
```

1212
**Description**:Return the client version.
1213

1214
### SERVER_VERSION
1215 1216

```
1217
SELECT SERVER_VERSION();
1218 1219
```

1220
**Description**:Returns the server version.
1221

1222
### SERVER_STATUS
1223 1224

```
1225
SELECT SERVER_VERSION();
1226 1227
```

1228
**Description**:Returns the server's status.