[SQL] 그룹 데이터, 그룹 - group by 필터 링, having

4300 단어 sql
그룹 만 들 기 - GROUP BY
그룹 은 SELECT 문장의 GROUP BY 자구 에서 이 루어 집 니 다.그것 의 역할 은 일정한 규칙 을 통 해 하나의 데이터 세트 를 몇 개의 작은 구역 으로 나 눈 다음 에 몇 개의 작은 구역 에 대해 데이터 처 리 를 하 는 것 이다.SELECT 자구 의 열 이름 은 그룹 열 이나 열 함수 여야 합 니 다. 열 함 수 는 GROUP BY 자구 가 정의 하 는 각 그룹 에 각각 결 과 를 되 돌려 줍 니 다.
일부 규정:
  • GROUP BY 자 구 는 임의의 수의 열 을 포함 할 수 있 습 니 다. 이 는 그룹 을 구성 하여 데이터 그룹 에 더욱 세밀 한 통 제 를 제공 할 수 있 습 니 다.
  • GROUP BY 자구 에 그룹 을 포함 하면 데 이 터 는 마지막 에 정 해진 그룹 에서 취 합 됩 니 다.
  • GROUP BY 자구 에 열 거 된 모든 열 은 검색 열 이나 유효한 표현 식 이 어야 합 니 다.SELECT 에서 표현 식 을 사용 하려 면 GROUP BU 자구 에서 같은 표현 식 을 지정 해 야 하 며, 별명 을 사용 할 수 없습니다.
  • 대부분의 SQL 은 GROUP BU 열 에 길이 가 변 하 는 데이터 형식 (예 를 들 어 텍스트 나 select department id, department name from basicdepartment group by department id, 주석 필드) 을 허용 하지 않 습 니 다.
  • 집합 계산 문 구 를 제외 하고 SELECT 문장의 모든 열 은 GROUP BY 자구 에서 제시 해 야 한다.
  • 그룹 열 에 NULL 값 이 있 으 면 NULL 은 그룹 으로 되 돌아 갑 니 다.열 에 여러 줄 의 NULL 값 이 있 으 면 한 그룹 으로 나 눌 것 입 니 다.
  • GROUP BY 자 구 는 WHERE 자구 다음 에 ORDER BY 자구 앞 에 나타 나 야 합 니 다.

  • 예시:
    <span style="font-family:SimSun;font-size:10px;">select departmentid, count(*) as 'number' from basicdepartment group by departmentid;</span>

    depart. ment id 는 데이터 세트 를 그룹 으로 나 눈 다음 에 각 그룹의 통계 데 이 터 를 각각 얼마나 합 니까?
    count (*) 를 사용 하지 않 고 다음 과 같은 문법 을 사용한다 면:
    <span style="font-family:SimSun;font-size:10px;">select departmentid, departmentname from basicdepartment group by departmentid;</span>

    집합 함수 나 GROUP BY 자구 에 포함 되 어 있 지 않 기 때문에 목록 에 있 는 departmentname 을 선택 하 는 중 오류 가 발생 할 수 있 습 니 다.
    메모: 집합 필드 에 되 돌아 오 면 이 필드 는 그룹 을 나 누 는 근거 로 GROUP BY 문장의 뒤에 포함 되 어야 합 니 다.아니면 집합 함수 에 포함 되 어야 합 니 다.
    필터 그룹 - HAVING
    그룹 데 이 터 를 GROUP BY 로 묶 을 수 있 는 것 외 에 SQL 은 그룹 을 걸 러 낼 수 있 으 며 어떤 그룹 을 포함 하고 어떤 그룹 을 제외 하 는 지 규정 합 니 다.예 를 들 어 적어도 두 개의 주문 이 있 는 모든 고객 을 열거 하려 면 이 데 이 터 를 얻 기 위해 서 는 개별 줄 이 아 닌 완전한 그룹 을 기반 으로 여과 해 야 합 니 다.
    WHERE 필터 줄, HAVING 필터 그룹.HAVING 은 모든 WHERE 연산 자 를 지원 하 며, HAVING 자구 에 집합 함 수 를 사용 할 수 있 습 니 다.WHERE 는 데이터 그룹 을 나 누 기 전에 필터 링 을 합 니 다.HAVING 은 데이터 그룹 을 나 눈 후 필터 링 을 합 니 다.WHERE 에서 제외 한 줄 은 그룹 에 포함 되 지 않 습 니 다.
    예시:
    select cust_id, count(*) as orders from Orders group by cust_id having count(*) >= 2;

    그룹 V. S. 정렬 - GROUP BY V. S. ORDER BY
    ORDER BY
    GROUP BY
    정렬 출력
    그룹 줄 이지 만 출력 은 그룹 순서 가 아 닐 수 있 습 니 다.
    임 의 열 은 모두 사용 할 수 있다.
    선택 열 이나 표현 식 열 만 사용 할 수 있 으 며, 각 선택 열 표현 식 을 사용 해 야 합 니 다.
    꼭 필요 한 것 은 아니다
    집합 함수 와 함께 열 을 사용 하려 면 반드시 사용 해 야 합 니 다.
    절대 그룹 BY 정렬 데이터 에 만 의존 하지 마 세 요.
    예시
    다음 표: 학생 번호 (SNO), 수업 명 (PNO), 성적 (GRADE)
    1 YY 90 1 SX 98 1 YW 95 2 YY 92 2 SX 91 2 YW 89 3 YY 96 3 SX 88 3 YW 85 4 YY 88 4 SX 89 4 YW 95
    1. 현식 90 점 이상 학생 의 수업 명 과 성적
    select * from sc where GRADE >= 90

    4 YW 95 3 YY 96 2 YY 92 2 SX 91 1 YY 90 1 SX 98 1 YW 95
    2.  명시 적 으로 모든 학생 의 성적 이 90 점 이상 인 것 은 각각 몇 개가 있 습 니까?
    select SNO, count(*) from sc where GRADE >= 90 group by SNO

    1
    3
    2
    2
    3
    1
    4
    1
    3.  최소 두 과목 이 90 점 이상 인 학생 번호 와 90 점 이상 인 과정 수 (필터 그룹)
    select SNO, count(*) from sc where GRADE >= 90 group by SNO having count(*) >= 2

    1
    3
    2
    2
    4.  평균 성적 이 90 점 이상 이 고 국어 가 95 이상 이 어야 하 는 학생 을 선정 하 다.
    select SNO, avg(GRADE) from sc where SNO in (select SNO from sc where PNO = 'YW' and GRADE >= 95) group by SNO having avg(GRADE) >= 90

    1
    94.333336
    4
    90.666664
    * * * 적용 * * *
    주식 순서 표 torder_fidessa_his :
    order_id    order_qty   symbol  ex_destination
    00001768627ORHK1 6000 933 HK 00001768632ORHK1 1200 933 HK 00001768634ORHK1 2000 941 HK 00001768634ORHK1 6000 941 HK 00001768634ORHK1 6000 941 HK 00001768634ORHK1 7000 941 HK
    같은 symbol 에 다른 ex 가 존재 하 는 지 확인 합 니 다.대상 값:
    select temp.symbol, count(*) from
    (select t.symbol as symbol, t.ex_destination as ex_destination from t_order_fidessa_his t group by t.symbol, t.ex_destination) temp
    group by temp.symbol having count(*) > 1

    두 번 의 group by 를 통 해 조회 합 니 다.

    좋은 웹페이지 즐겨찾기