STDDEV / STDDEV_SAMP
STDDEV / STDDEV_SAMP
STDDEV()(및 동의어 STDDEV_SAMP()) 함수는 비-NULL 값의 표본 표준편차(표본 분산의 제곱근)를 반환해요. STDDEV와 STDDEV_SAMP는 같은 함수의 별칭이에요.
모집단 표준편차(분산의 제곱근)를 반환하는 STDDEV_POP도 참고하세요.
본문
문법
집계 함수(Aggregate function)
{ STDDEV | STDDEV_SAMP } ( [ DISTINCT ] <expr1> )
윈도우 함수(Window function)
{ STDDEV | STDDEV_SAMP } ( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ <window_frame> ] ]
)
window_frame 문법에 대한 자세한 내용은 윈도우 프레임 사용 메모를 참고하세요.
반환
반환 값의 데이터 타입은 DOUBLE이에요.
그룹 안의 모든 레코드가 NULL이면 이 함수는 NULL을 반환해요.
사용 메모
- 단일 레코드 입력에 대해 STDDEV와 STDDEV_SAMP 모두 NULL을 반환해요. 이는 STDDEV_SAMP가 단일 레코드에 대해 NULL을, STDDEV가 0을 반환하는 Oracle 동작과 달라요.
- VARCHAR 표현식을 전달하면 이 함수는 입력을 부동소수점 값으로 암시적으로 캐스팅해요. 캐스팅을 수행할 수 없으면 오류가 반환돼요.
- 이 함수를 윈도우 함수로 호출하고 OVER 절에 ORDER BY 절이 있으면: 윈도우 프레임에 대한 자세한 내용(문법과 예제 포함)은 윈도우 프레임 사용 메모를 참고하세요.
집계 함수 예제
다음 예제는 작은 정수 표본에 대한 표준편차를 계산해요.
CREATE TABLE t1 (c1 INTEGER);
INSERT INTO t1 (c1) VALUES
(6),
(10),
(14);
SELECT STDDEV(c1) FROM t1;
+----------+
| STDDEV() |
|----------|
| 4 |
+----------+
STDDEV_SAMP 함수는 같은 결과를 반환한다는 점에 유의하세요.
SELECT STDDEV_SAMP(c1) FROM t1;
+-----------------+
| STDDEV_SAMP(C1) |
|-----------------|
| 4 |
+-----------------+
다음 예제는 푸드트럭 판매 품목을 나열하는 menu_items라는 작은 테이블을 사용해요. 이 테이블을 만들고 로드하려면 menu_items 테이블 만들기 및 로드를 참고하세요.
Dessert 행에 대해 판매 원가(COGS)와 판매가 양쪽의 표본 표준편차를 구하려면 이 쿼리를 실행해요.
SELECT menu_category, STDDEV(menu_cogs_usd) AS stddev_cogs, STDDEV(menu_price_usd) AS stddev_price
FROM menu_items
WHERE menu_category = 'Dessert'
GROUP BY 1;
+---------------+-------------+--------------+
| MENU_CATEGORY | STDDEV_COGS | STDDEV_PRICE |
|---------------+-------------+--------------|
| Dessert | 1.00519484 | 1.471960144 |
+---------------+-------------+--------------+
윈도우 함수 예제
다음 예제도 menu_items 테이블(menu_items 테이블 만들기 및 로드 참고)을 사용하지만 STDDEV 함수를 윈도우 함수로 호출해요.
윈도우 함수는 menu_category 컬럼으로 행을 파티션으로 나눠요. 따라서 표준편차는 카테고리마다 한 번씩 계산되고, 그 값이 그룹의 각 행에 대해 결과에서 반복돼요. 이 예제에서 행은 메뉴 카테고리와 판매 원가 양쪽으로 그룹화되어야 해요.
SELECT menu_category, menu_cogs_usd,
STDDEV(menu_cogs_usd) OVER(PARTITION BY menu_category) AS stddev_cogs
FROM menu_items
GROUP BY 1, 2
ORDER BY menu_category;
다음 출력은 이 쿼리의 부분 결과 집합(처음 15행)이에요.
+---------------+---------------+--------------+
| MENU_CATEGORY | MENU_COGS_USD | STDDEV_COGS |
|---------------+---------------+--------------|
| Beverage | 0.50 | 0.1258305738 |
| Beverage | 0.65 | 0.1258305738 |
| Beverage | 0.75 | 0.1258305738 |
| Dessert | 1.25 | 1.054751155 |
| Dessert | 3.00 | 1.054751155 |
| Dessert | 1.00 | 1.054751155 |
| Dessert | 2.50 | 1.054751155 |
| Dessert | 0.50 | 1.054751155 |
| Main | 4.50 | 3.444051572 |
| Main | 2.40 | 3.444051572 |
| Main | 1.50 | 3.444051572 |
| Main | 11.00 | 3.444051572 |
| Main | 8.00 | 3.444051572 |
| Main | NULL | 3.444051572 |
| Main | 12.00 | 3.444051572 |
...
menu_items 테이블 만들기 및 로드
일부 함수 예제에서 사용하는 menu_items 테이블을 만들고 행을 삽입하려면 다음 SQL 명령을 실행해요. (이 테이블은 60행을 담고 있어요. Tasty Bytes 샘플 데이터베이스의 menu 테이블을 기반으로 하되 동일하지는 않아요.)
CREATE OR REPLACE TABLE menu_items(
menu_id INT NOT NULL,
menu_category VARCHAR(20),
menu_item_name VARCHAR(50),
menu_cogs_usd NUMBER(7,2),
menu_price_usd NUMBER(7,2));
INSERT INTO menu_items VALUES(1,'Beverage','Bottled Soda',0.500,3.00);
INSERT INTO menu_items VALUES(2,'Beverage','Bottled Water',0.500,2.00);
INSERT INTO menu_items VALUES(3,'Main','Breakfast Crepe',5.00,12.00);
INSERT INTO menu_items VALUES(4,'Main','Buffalo Mac & Cheese',6.00,10.00);
INSERT INTO menu_items VALUES(5,'Main','Chicago Dog',4.00,9.00);
INSERT INTO menu_items VALUES(6,'Main','Chicken Burrito',3.2500,12.500);
INSERT INTO menu_items VALUES(7,'Main','Chicken Pot Pie Crepe',6.00,15.00);
INSERT INTO menu_items VALUES(8,'Main','Combination Curry',9.00,15.00);
INSERT INTO menu_items VALUES(9,'Main','Combo Fried Rice',5.00,11.00);
INSERT INTO menu_items VALUES(10,'Main','Combo Lo Mein',6.00,13.00);
INSERT INTO menu_items VALUES(11,'Main','Coney Dog',5.00,10.00);
INSERT INTO menu_items VALUES(12,'Main','Creamy Chicken Ramen',8.00,17.2500);
INSERT INTO menu_items VALUES(13,'Snack','Crepe Suzette',4.00,9.00);
INSERT INTO menu_items VALUES(14,'Main','Fish Burrito',3.7500,12.500);
INSERT INTO menu_items VALUES(15,'Snack','Fried Pickles',1.2500,6.00);
INSERT INTO menu_items VALUES(16,'Snack','Greek Salad',4.00,11.00);
INSERT INTO menu_items VALUES(17,'Main','Gyro Plate',8.00,12.00);
INSERT INTO menu_items VALUES(18,'Main','Hot Ham & Cheese',7.00,11.00);
INSERT INTO menu_items VALUES(19,'Dessert','Ice Cream Sandwich',1.00,4.00);
INSERT INTO menu_items VALUES(20,'Beverage','Iced Tea',0.7500,3.00);
INSERT INTO menu_items VALUES(21,'Main','Italian',6.00,11.00);
INSERT INTO menu_items VALUES(22,'Main','Lean Beef Tibs',6.00,13.00);
INSERT INTO menu_items VALUES(23,'Main','Lean Burrito Bowl',3.500,12.500);
INSERT INTO menu_items VALUES(24,'Main','Lean Chicken Tibs',5.00,11.00);
INSERT INTO menu_items VALUES(25,'Main','Lean Chicken Tikka Masala',10.00,17.00);
INSERT INTO menu_items VALUES(26,'Beverage','Lemonade',0.6500,3.500);
INSERT INTO menu_items VALUES(27,'Main','Lobster Mac & Cheese',10.00,15.00);
INSERT INTO menu_items VALUES(28,'Dessert','Mango Sticky Rice',1.2500,5.00);
INSERT INTO menu_items VALUES(29,'Main','Miss Piggie',2.600,6.00);
INSERT INTO menu_items VALUES(30,'Main','Mothers Favorite',4.500,12.00);
INSERT INTO menu_items VALUES(31,'Main','New York Dog',4.00,8.00);
INSERT INTO menu_items VALUES(32,'Main','Pastrami',8.00,11.00);
INSERT INTO menu_items VALUES(33,'Dessert','Popsicle',0.500,3.00);
INSERT INTO menu_items VALUES(34,'Main','Pulled Pork Sandwich',7.00,12.00);
INSERT INTO menu_items VALUES(35,'Main','Rack of Pork Ribs',11.2500,21.00);
INSERT INTO menu_items VALUES(36,'Snack','Seitan Buffalo Wings',4.00,7.00);
INSERT INTO menu_items VALUES(37,'Main','Spicy Miso Vegetable Ramen',7.00,17.2500);
INSERT INTO menu_items VALUES(38,'Snack','Spring Mix Salad',2.2500,6.00);
INSERT INTO menu_items VALUES(39,'Main','Standard Mac & Cheese',3.00,8.00);
INSERT INTO menu_items VALUES(40,'Dessert','Sugar Cone',2.500,6.00);
INSERT INTO menu_items VALUES(41,'Main','Tandoori Mixed Grill',11.00,18.00);
INSERT INTO menu_items VALUES(42,'Main','The Classic',4.00,12.00);
INSERT INTO menu_items VALUES(43,'Main','The King Combo',12.00,20.00);
INSERT INTO menu_items VALUES(44,'Main','The Kitchen Sink',6.00,14.00);
INSERT INTO menu_items VALUES(45,'Main','The Original',1.500,5.00);
INSERT INTO menu_items VALUES(46,'Main','The Ranch',2.400,6.00);
INSERT INTO menu_items VALUES(47,'Main','The Salad of All Salads',6.00,12.00);
INSERT INTO menu_items VALUES(48,'Main','Three Meat Plate',10.00,17.00);
INSERT INTO menu_items VALUES(49,'Main','Three Taco Combo Plate',7.00,11.00);
INSERT INTO menu_items VALUES(50,'Main','Tonkotsu Ramen',7.00,17.2500);
INSERT INTO menu_items VALUES(51,'Main','Two Meat Plate',9.00,14.00);
INSERT INTO menu_items VALUES(52,'Dessert','Two Scoop Bowl',3.00,7.00);
INSERT INTO menu_items VALUES(53,'Main','Two Taco Combo Plate',6.00,9.00);
INSERT INTO menu_items VALUES(54,'Main','Veggie Burger',5.00,9.00);
INSERT INTO menu_items VALUES(55,'Main','Veggie Combo',4.00,9.00);
INSERT INTO menu_items VALUES(56,'Main','Veggie Taco Bowl',6.00,10.00);
INSERT INTO menu_items VALUES(57,'Dessert','Waffle Cone',2.500,6.00);
INSERT INTO menu_items VALUES(58,'Main','Wonton Soup',2.00,6.00);
INSERT INTO menu_items VALUES(59,'Main','Mini Pizza',null,null);
INSERT INTO menu_items VALUES(60,'Main','Large Pizza',null,null);