OceanBase APPROX_COUNT_DISTINCT

2021-06-24 11:08 更新

APPROX_COUNT_DISTINCT 函數(shù)是聚合函數(shù),它對某一列去重后的行數(shù)進行計算,結(jié)果只能返回一個值,且該值是近似值,該函數(shù)可以進一步用于計算被引用的列的選擇性。

與函數(shù) COUNT(DISTINCT x) 相比,APPROX_COUNT_DISTINCT 返回的是近似值,所以計算速度極快。在處理大量級的數(shù)據(jù)時 COUNT(DISTINCT x) 經(jīng)常要花費很長的時間,使用 APPROX_COUNT_DISTINCT 犧牲了少量的精確度,卻換來了計算效率的極大提升。

語法

APPROX_COUNT_DISTINCT(expr)

參數(shù)

參數(shù)

說明

expr

數(shù)值列。

返回類型

返回 NUMBER 類型數(shù)據(jù)。

示例

以下語句創(chuàng)建了表 employees,并向里面插入數(shù)據(jù):

CREATE TABLE employees (manager_id INT,last_name varchar(50),hiredate varchar(50),SALARY INT);
INSERT INTO employees VALUES(100, 'Raphaely', '2017-07-01', 1700);
INSERT INTO employees VALUES(100, 'De Haan', '2018-05-01',11000);      
INSERT INTO employees VALUES(100, 'Errazuriz', '2017-07-21', 1400);
INSERT INTO employees VALUES(100, 'Hartstein', '2019-05-01',14000);     
INSERT INTO employees VALUES(100, 'Raphaely', '2017-07-22', 1700);
INSERT INTO employees VALUES(100, 'Weiss',  '2019-07-11',13500);     
INSERT INTO employees VALUES(100, 'Russell', '2019-10-05', 13000);
INSERT INTO employees VALUES(100, 'Partners',  '2018-12-01',14000);     
INSERT INTO employees VALUES(200, 'Ross',  '2019-06-11',13500);     
INSERT INTO employees VALUES(200, 'Bell', '2019-05-25', 13000);
INSERT INTO employees VALUES(200, 'Part',  '2018-08-11',14000);  
COMMIT;

執(zhí)行以下語句:

SELECT last_name, salary, APPROX_COUNT_DISTINCT(salary) OVER (ORDER BY hiredate) "Variance"
FROM employees WHERE manager_id = 100 ORDER BY last_name, salary, "Variance";

查詢結(jié)果如下:

+-----------+--------+----------+
| LAST_NAME | SALARY | Variance |
+-----------+--------+----------+
| De Haan   |  11000 |        3 |
| Errazuriz |   1400 |        2 |
| Hartstein |  14000 |        4 |
| Partners  |  14000 |        4 |
| Raphaely  |   1700 |        1 |
| Raphaely  |   1700 |        2 |
| Russell   |  13000 |        6 |
| Weiss     |  13500 |        5 |
+-----------+--------+----------+
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號