programing

SQL에서 열 값의 발생 횟수를 효율적으로 계산하는 방법은 무엇입니까?

newstyles 2023. 8. 22. 21:58

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