SQL에서 열 값의 발생 횟수를 효율적으로 계산하는 방법은 무엇입니까?
나는 학생들의 표를 가지고 있습니다.
id | age
--------
0 | 25
1 | 25
2 | 23
모든 학생과 같은 연령의 학생 수를 계산하는 추가 열을 쿼리합니다.
id | age | count
----------------
0 | 25 | 2
1 | 25 | 2
2 | 23 | 1
이것을 하는 가장 효율적인 방법은 무엇입니까?서브쿼리가 느릴까봐 걱정되는데, 더 좋은 방법이 없을까 생각 중입니다.있어?
이렇게 하면 됩니다.
SELECT age, count(age)
FROM Students
GROUP by age
ID가 필요한 경우 다음과 같은 하위 쿼리로 위를 포함할 수 있습니다.
SELECT S.id, S.age, C.cnt
FROM Students S
INNER JOIN (SELECT age, count(age) as cnt
FROM Students
GROUP BY age) C ON S.age = C.age
여기 또 다른 해결책이 있습니다.이것은 매우 간단한 구문을 사용합니다.승인된 솔루션의 첫 번째 예는 이전 버전의 Microsoft SQL(즉, 2000)에서 작동하지 않았습니다.
SELECT age, count(*)
FROM Students
GROUP by age
ORDER BY age
Oracle을 사용하는 경우 Analytics라는 기능이 유용합니다.다음과 같이 표시됩니다.
select id, age, count(*) over (partition by age) from students;
Oracle을 사용하지 않는 경우 다음과 같이 다시 가입해야 합니다.
select a.id, a.age, b.age_count
from students a
join (select age, count(*) as age_count
from students
group by age) b
on a.age = b.age
다음과 같은 작업을 수행합니다.
select
A.id, A.age, B.count
from
students A,
(select age, count(*) as count from students group by age) B
where A.age=B.age;
select s.id, s.age, c.count
from students s
inner join (
select age, count(*) as count
from students
group by age
) c on s.age = c.age
order by id
또한 "연령" 열에 있는 데이터의 기록이 유사한 경우(즉, 많은 사람이 25세, 다른 사람이 32세 등) 각 학생에 대한 올바른 카운트를 정렬하는 데 혼란이 발생합니다.그것을 피하기 위해, 저는 학생증 표에도 가입했습니다.
SELECT S.id, S.age, C.cnt
FROM Students S
INNER JOIN (SELECT id, age, count(age) as cnt FROM Students GROUP BY student,age)
C ON S.age = C.age *AND S.id = C.id*
이렇게 하면 됩니다.
모든 행을 가져와서 행을 셀 수 있습니다.
select *,count(*) over() from students;
언급URL : https://stackoverflow.com/questions/1503959/how-to-count-occurrences-of-a-column-value-efficiently-in-sql
'programing' 카테고리의 다른 글
jQuery .ajax() - POST 요청에 쿼리 매개 변수를 추가하시겠습니까? (0) | 2023.08.22 |
---|---|
도커 컨테이너를 데이터 볼륨으로 백업하려면 어떻게 해야 합니까? (0) | 2023.08.22 |
스파이더 엔진에 의해 결과 행이 두 배로 증가합니다. (0) | 2023.08.22 |
VBA 클래스 모듈의 속성을 허용합니다. 여러 개의 인수를 가질 수 있습니까? (0) | 2023.08.17 |
Excel 파일을 읽을 때 Pandas 데이터 프레임 및 문자 인코딩 (0) | 2023.08.17 |