반응형
내가하는 일 :
create table sample (id INT(10) PRIMARY KEY AUTO_INCREMENT,name varchar(255),marks INT(10));
insert into sample (name,marks) VALUES('sam',10);
insert into sample (name,marks) VALUES('sam',20);
insert into sample (name,marks) VALUES('sam',NULL);
insert into sample (name,marks) VALUES('sam',NULL);
insert into sample (name,marks) VALUES('sam',30);
select AVG(marks) from sample GROUP BY(name);
예상 출력 :
평균 = (10 + 20 + 30) / 5 = 12
MySQL 출력 :
평균 = (10 + 20 + 30) / 3 = 20
이상적으로 내가 원한 것은 MYSQL이 5 행의 합계를 가져 와서 5로 나누는 것이지만 3으로 나눕니다 (NULL이 아닌 행).
이 문제가 발생하는 이유는 무엇이며 올바른 AVG ie 60/5를 얻으려면 어떻게해야합니까? 추신 : 내 db 디자인에서 마크 필드는 NULL이 될 수 있습니다.
감사합니다
해결 방법
NULL
이 숫자 0
과 같지 않기 때문에 이것은 올바른 동작입니다.
달리 명시되지 않는 한 그룹 함수는 NULL 값을 무시합니다.
원하는 것을 얻으려면 할 수 있습니다.
SELECT AVG(IFNULL(marks, 0))
FROM sample
GROUP BY name;
In SQL, the `NULL` value is never true in comparison to any other value, even `NULL`. An expression that contains `NULL` always produces a `NULL` value unless otherwise indicated in the documentation for the operators and functions involved in the expression.
i.e.: `NULL == 0` results in NULL instead of `true`. Also `NULL == NULL` results in NULL, instead of true.
To search for column values that are `NULL`, you cannot use an `expr = NULL` test. To look for `NULL` values, you must use the `IS NULL` test.
When using `DISTINCT`, `GROUP BY`, or `ORDER BY`, all `NULL` values are regarded as equal.
When using `ORDER BY`, `NULL` values are presented first, or last if you specify `DESC` to sort in descending order.
For some data types, MySQL handles NULL values specially. If you insert `NULL` into a `TIMESTAMP` column, the current date and time is inserted.
If you insert `NULL` into an integer or floating-point column that has the `AUTO_INCREMENT` attribute, the next number in the sequence is inserted.
A column that has a `UNIQUE` key defined can still contain multiple `NULL` values.
참조 페이지 https://stackoverflow.com/questions/14020924
반응형
'MySql' 카테고리의 다른 글
MySQL PHP PDO 대 일반 mysql_connect (0) | 2021.01.17 |
---|---|
MySQL UPDATE 열에 데이터 추가 (0) | 2021.01.17 |
MySQL : 데이터를 따라 데이터베이스 덤프 (0) | 2021.01.17 |
MySQL 테이블의 한 열에서 중복 값 선택 (0) | 2021.01.17 |
MySQL-두 테이블을 업데이트하는 삽입 트리거 이후? (0) | 2021.01.16 |
댓글