SQL에서 count(열)와 count(*)의 차이점은 무엇입니까?
다음과 같은 질문이 있습니다.
select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;
모든 전화를 대체하면 무엇이 달라질까요?count(column_name)
로.count(*)
?
이 질문은 Oracle의 테이블에서 중복된 값을 찾으려면 어떻게 해야 합니까?에서 영감을 받았습니다.
승인된 답변(및 내 질문)을 명확히 하기 위해, 대체count(column_name)
와 함께count(*)
다음을 포함하는 결과에서 추가 행을 반환합니다.null
그리고 의 수null
열에 값을 입력합니다.
count(*)
카운트 NULL 및count(column)
하지 않다
[edit] 사람들이 실행할 수 있도록 이 코드를 추가했습니다.
create table #bla(id int,id2 int)
insert #bla values(null,null)
insert #bla values(1,null)
insert #bla values(null,1)
insert #bla values(1,null)
insert #bla values(null,1)
insert #bla values(1,null)
insert #bla values(null,null)
select count(*),count(id),count(id2)
from #bla
결과 7 3 2
*를 사용하는 것과 특정 열을 사용하는 것 사이의 또 다른 사소한 차이점은 열의 경우 DISTINCT 키워드를 추가하고 카운트를 고유한 값으로 제한할 수 있다는 것입니다.
select column_a, count(distinct column_b)
from table
group by column_a
having count(distinct column_b) > 1;
또한 일부 데이터베이스 구현에서는 실제 데이터 행이 아닌 해당 테이블의 인덱스를 보고 카운트(*)를 계산합니다.특정 열이 지정되지 않았기 때문에 실제 행과 해당 값을 고려할 필요가 없습니다(특정 열을 세었을 때처럼).데이터베이스가 인덱스 데이터를 사용하도록 허용하는 것이 "실제" 행을 카운트하는 것보다 훨씬 빠를 수 있습니다.
설명서의 설명은 이를 설명하는 데 도움이 됩니다.
COUNT(*)는 NULL 값 및 중복 항목을 포함하여 그룹의 항목 수를 반환합니다.
COUNT(식)는 그룹의 각 행에 대한 식을 평가하고 null이 아닌 값의 수를 반환합니다.
따라서 count(*)에는 null이 포함되지만 다른 방법에는 포함되지 않습니다.
스택 Exchange 데이터 탐색기를 사용하여 간단한 쿼리로 차이점을 설명할 수 있습니다.스택 오버플로의 데이터베이스에 있는 사용자 테이블에는 사용자의 웹 사이트 URL과 같이 종종 비어 있는 열이 있습니다.
-- count(column_name) vs. count(*)
-- Illustrates the difference between counting a column
-- that can hold null values, a 'not null' column, and count(*)
select count(WebsiteUrl), count(Id), count(*) from Users
데이터 탐색기에서 위의 쿼리를 실행하면 다음 항목에 대한 카운트가 동일하다는 것을 알 수 있습니다.count(Id)
그리고.count(*)
왜냐하면Id
열에서 허용되지 않음null
가치관.WebsiteUrl
하지만 카운트는 훨씬 더 낮습니다. 왜냐하면 그 열이 허용하기 때문입니다.null
.
- COUNT(*) 문장은 NULL을 포함하여 테이블의 모든 행을 반환하는 SQL Server를 나타냅니다.
- COUNT(columnn_name)는 행에 값이 없는 행만 검색합니다.
테스트 실행 SQL Server 2008은 다음 코드를 참조하십시오.
-- Variable table
DECLARE @Table TABLE
(
CustomerId int NULL
, Name nvarchar(50) NULL
)
-- Insert some records for tests
INSERT INTO @Table VALUES( NULL, 'Pedro')
INSERT INTO @Table VALUES( 1, 'Juan')
INSERT INTO @Table VALUES( 2, 'Pablo')
INSERT INTO @Table VALUES( 3, 'Marcelo')
INSERT INTO @Table VALUES( NULL, 'Leonardo')
INSERT INTO @Table VALUES( 4, 'Ignacio')
-- Get all the collumns by indicating *
SELECT COUNT(*) AS 'AllRowsCount'
FROM @Table
-- Get only content columns ( exluce NULLs )
SELECT COUNT(CustomerId) AS 'OnlyNotNullCounts'
FROM @Table
COUNT(*)
테이블의 총 레코드 수를 반환합니다(NULL 값 레코드 포함).
COUNT(Column Name)
NULL이 아닌 레코드의 총 수를 반환합니다. 값 를 계산하는 은 무시됩니다.", "NULL"은 NULL을 의미합니다.
으로 기적으로본.COUNT(*)
함수는 테이블의 모든 행을 반환하는 반면COUNT(COLUMN_NAME)
그렇지 않습니다. 즉, 여기에 있는 모든 사용자가 여기서 응답한 null 값을 제외합니다.그러나 가장 흥미로운 부분은 쿼리를 만들고 데이터베이스를 최적화하여 사용하는 것이 더 낫습니다.COUNT(*)
다중 카운트 또는 복잡한 쿼리를 수행하지 않는 한COUNT(COLUMN_NAME)
그렇지 않으면 엄청난 양의 데이터를 처리하는 동안 DB 성능이 저하됩니다.
@SQL Meanance와 @Brannon이 제공한 답변에 대해 자세히 설명합니다.GROUP BY
OP에 의해 언급되었지만 @SQLMenace에 의해 답변에 존재하지 않는 절
CREATE TABLE table1 (
id INT
);
INSERT INTO table1 VALUES
(1),
(2),
(NULL),
(2),
(NULL),
(3),
(1),
(4),
(NULL),
(2);
SELECT * FROM table1;
+------+
| id |
+------+
| 1 |
| 2 |
| NULL |
| 2 |
| NULL |
| 3 |
| 1 |
| 4 |
| NULL |
| 2 |
+------+
10 rows in set (0.00 sec)
SELECT id, COUNT(*) FROM table1 GROUP BY id;
+------+----------+
| id | COUNT(*) |
+------+----------+
| 1 | 2 |
| 2 | 3 |
| NULL | 3 |
| 3 | 1 |
| 4 | 1 |
+------+----------+
5 rows in set (0.00 sec)
여기서,COUNT(*)
에서는 각 합니다.id
포하여를 NULL
SELECT id, COUNT(id) FROM table1 GROUP BY id;
+------+-----------+
| id | COUNT(id) |
+------+-----------+
| 1 | 2 |
| 2 | 3 |
| NULL | 0 |
| 3 | 1 |
| 4 | 1 |
+------+-----------+
5 rows in set (0.00 sec)
여기서,COUNT(id)
에서는 각 합니다.id
발생 .NULL
SELECT id, COUNT(DISTINCT id) FROM table1 GROUP BY id;
+------+--------------------+
| id | COUNT(DISTINCT id) |
+------+--------------------+
| NULL | 0 |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
+------+--------------------+
5 rows in set (0.00 sec)
여기서,COUNT(DISTINCT id)
에서는 각 합니다.id
만 (), NULL
사용하는 것이 가장 좋습니다.
Count(1) in place of column name or *
테이블에 있는 행의 수를 계산하는 경우, 테이블에 열 이름이 있는지 여부를 확인하지 않기 때문에 어떤 형식보다 빠릅니다.
테이블에 하나의 열이 고정되어 있는 경우와 둘 이상의 열을 사용하려는 경우에는 카운트할 열 수 있는 열 수를 지정해야 하는 경우와 차이가 없습니다.
감사해요.
답변에서 했듯이, 이전답변언바와같이급한서에,같▁as이와바,▁mentioned,Count(*)
더 중요하게 여기다NULL
에 열, 면count(Columnname)
열에 값이 있는 경우에만 카운트됩니다.
항상 피하는 것이 최선의 방법입니다.*
(Select *
,count *
, …)
언급URL : https://stackoverflow.com/questions/59294/in-sql-whats-the-difference-between-countcolumn-and-count
'source' 카테고리의 다른 글
URI, Android KitKat의 새로운 스토리지 액세스 프레임워크에서 실제 경로 얻기 (0) | 2023.09.04 |
---|---|
마우스가 테이블의 행 위에 이동할 때 커서를 손으로 변경 (0) | 2023.09.04 |
Angular 2의 하위 구성 요소에서 상위 구성 요소 속성 업데이트 (0) | 2023.09.04 |
콘다 + 시를 사용하는 것이 말이 됩니까? (0) | 2023.09.04 |
-1103 오류 Domain=NSURLerrorDomain Code=-1103 "리소스가 최대 크기를 초과합니다" iOS 13 (0) | 2023.09.04 |