복붙노트

[SQL] 어떻게 SQL에서 효율적으로 열 값의 발생을 계산하려면?

SQL

어떻게 SQL에서 효율적으로 열 값의 발생을 계산하려면?

나는 학생들의 테이블이 있습니다 :

id | age
--------
0  | 25
1  | 25
2  | 23

나는 모든 학생들을위한 쿼리 및 추가 열을하고자하는 같은 나이의 얼마나 많은 학생들이 있습니다 카운트 것을 :

id | age | count
----------------
0  | 25  | 2
1  | 25  | 2
2  | 23  | 1

이 일을 가장 효율적인 방법은 무엇입니까? 나는 하위 쿼리가 느린 것을 두려워하고, 더 나은 방법이 있는지 궁금하네요. 이 있습니까?

해결법

  1. ==============================

    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
    
  2. ==============================

    2.Oracle을 사용하는 경우, 다음 기능이라고 분석 트릭을 할 것입니다. 그것은 다음과 같습니다 :

    Oracle을 사용하는 경우, 다음 기능이라고 분석 트릭을 할 것입니다. 그것은 다음과 같습니다 :

    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
    
  3. ==============================

    3.여기에 또 다른 솔루션입니다. 이와 매우 간단한 문법을 ​​사용한다. 수락 솔루션의 첫 번째 예는 마이크로 소프트 SQL의 이전 버전에서 작동하지 않았다 (즉 2000)

    여기에 또 다른 솔루션입니다. 이와 매우 간단한 문법을 ​​사용한다. 수락 솔루션의 첫 번째 예는 마이크로 소프트 SQL의 이전 버전에서 작동하지 않았다 (즉 2000)

    SELECT age, count(*)
    FROM Students 
    GROUP by age
    ORDER BY age
    
  4. ==============================

    4.내가 좋아하는 일을 할 것입니다 :

    내가 좋아하는 일을 할 것입니다 :

    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;
    
  5. ==============================

    5.

    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
    
  6. ==============================

    6."연령"열에서 데이터가 유사한 기록이있는 경우, 그것은 각각의 학생에게 적절한 수를 정렬에 혼란을 야기 (많은 사람들이 25 세 즉, 많은 사람들이 (32) 등이다). 그것을 방지하기 위해, 나뿐만 아니라 학생 ID의 테이블에 합류했다.

    "연령"열에서 데이터가 유사한 기록이있는 경우, 그것은 각각의 학생에게 적절한 수를 정렬에 혼란을 야기 (많은 사람들이 25 세 즉, 많은 사람들이 (32) 등이다). 그것을 방지하기 위해, 나뿐만 아니라 학생 ID의 테이블에 합류했다.

    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*
    
  7. from https://stackoverflow.com/questions/1503959/how-to-count-occurrences-of-a-column-value-efficiently-in-sql by cc-by-sa and MIT license