빠른 MySQL의 검토 : 요약 및 그룹화

로에게 위의 전제 : 책 참조 "MySQL은 알고 있어야이 될 것"

10.3 요약 데이터

실제로 사무실 그들을 색출없이 우리는 종종 특별한 기능 MySQL의를 제공하기 위해, 집계 데이터에 목표를해야합니다. 이러한 기능을 사용하여 MySQL의 쿼리 분석 및 보고서 생성을위한 데이터를 검색 할 수 있습니다. 검색이 유형의 예는 다음과 같다 :

  • 테이블의 행들의 개수를 결정 (또는 조건이나 특정 값을 포함하는 행수를 만족).
  • 테이블과 세트의 행을 얻습니다.
  • 최대의 테이블 컬럼의 값 (또는 행 또는 모든 행의 특정), 최소 및 평균을 찾습니다.

데이터 테이블 (보다는 실제 데이터 자체)에서 상술 한 요구의 예로 요약된다. 따라서, 실제 반환 데이터 테이블이 시간과 처리 자원의 낭비는 (a의 대역폭을 언급하지 않기 위하여).

MySQL의 이벤트 다섯 개 집계 함수.

집합체 행 그룹에서 실행되는 함수 (집계 기능)을 계산 함수가 리턴 한 값.

기능 설명
AVG () 컬럼의 평균을 반환
카운트() 열의 행의 수를 반환
MAX () 컬럼의 최대 값을 반환
MIN () 열의 최소 값을 반환
합집합() 반환 컬럼의 값과

이러한 기능에 대한 간략한의 설명입니다

다음 테이블을 만듭니다

CREATE TABLE student(
    sid INT PRIMARY KEY,
    sname VARCHAR(20),
    ssex  CAHR(1)
);
CREATE TABLE score(
    sid INT PRIMARY KEY,
    sname VARCHAR(20),
    smath INT,
    senglish INT
);

10.3.1 AVG () 함수

표 및 계산하는 특정 항목의 합계의 행의 수를 세어 AVG ()는 열 평균치를 얻었다. AVG ()는 모든 컬럼의 평균을 리턴하는 데 사용되는 열은 특정 평균을 반환 할 수있다.

AVG ()는 특정 항목의 평균값을 결정하는데 사용될 수 있고, 열 이름은 함수 파라미터로 주어져야한다. 복수 열분의 평균치를 얻기 위해, 사용자는 AVG () 함수의 복수를 사용한다.
AVG () 함수는 연속 열 값은 NULL이다 무시한다.

(더하기 몇 난수 자신을)의 수학 성취도 테이블의 평균 점수를 조회 할 수 AVG () 함수를 사용하려면 :

SELECT AVG(smath) AS avg_smath FROM score;

AVG ()는 또한 WHERE 절, 특정 항목의 평균값을 결정하는데 사용될 수있다.

10.3.2 COUNT () 함수

COUNT () 함수는 행의 수를 결정하는 대회 특정 기준, 또는 테이블의 행.

COUNT () 함수를 사용하는 방법은 두 가지가 있습니다 :

  • 테이블 열에 상관없이, 테이블의 행의 수를 카운트 이용 COUNT (*)는 NULL 값 (NULL) 또는 비 - 널 값을 포함한다.
  • 특정 열 값 카운트 NULL 값의 행을 가진 사용 COUNT (열)는 무시됩니다.

예를 들어 학생들의 총 수를 반환합니다 :

SELECT COUNT(*) FROM student;

총 수 (특정 열) 여자를 반환합니다 :

SELECT COUNT(ssex) FROM student WHERE ssex='女';

당신이 열 이름을 지정하면 지정된 열은 빈 행이 COUNT () 함수는 무시된다이지만, COUNT ()는 별표와 함수의 경우 (*), 무시할 수 없습니다.

10.3.3 MAX () 함수

MAX () 지정된 열에서 가장 큰 값을 반환합니다. MAX는 () 열 이름을 지정해야합니다.

예를 들면 : 결과 테이블 수학 성취도에서 가장 높은 점수 가기

SELECT MAX(smath) FROM score;

MAX ()는 일반적으로 MySQL의에 최대 값 또는 날짜 값을 찾는 데 사용하지만, 수 있지만 텍스트 열 반환 최대 값을 포함하여 모든 열에서 최대 값을 반환합니다. 경우 데이터가 대응하는 열에 따라 정렬되는 경우 텍스트 데이터는 상기 MAX ()는 마지막 행을 반환. MIN () 함수이지만, 반대로, 앞줄의 반환.

MAX (), MIN ()가 무시되는 행의 열 값은 NULL입니다.

10.3.4 MIN () 함수

MIN () 지정된 열에서 최소 값을 반환합니다. MIN ()는 열 이름을 지정해야합니다.

예를 들면 다음과 같습니다 돌아 수학 성취도에서 가장 낮은 점수를 성적표 :

SELECT MIN(smath) FROM score;

10.3.5 SUM () 함수

합 () 지정된 열 및 (전체)의 값을 반환하는 데 사용된다.

이러한에서 수학 클래스에서 총 점수의 반환 등 :

SELECT SUM(smath) FROM score;

표준 산술 연산자를 사용하여, 집계 기능은 모든 복수 열에서 계산을 수행하는데 사용될 수있다.

합 () 함수 무시 행 열의 값은 NULL이다.

10.3.6은 다른 값을 수집

다음과 같이 5 개 이상의 집계 함수를 사용할 수 있습니다 :

  • 모든 행 또는 파라미터 (MAX 및 MIN) 지정된 파라미터에 대한 계산을 수행하는 단계;
  • 단지 다른 값을 포함, DISTINCT 매개 변수를 지정합니다. (디엠 퍼시스)

예를 들어 DISTINCT 매개 변수는 다음의 사용을 지정합니다 : 예를 들어, 평균 수학 점수 만 다른 점을 고려의 평균 점수의 테이블의 결과 :

SELECT AVG(DISTINCT smath) AS avg_smath FROM score;

지정하면 열 이름은 사용 COUNT (*), 따라서 COUNT (DISTINCT) 허용하지 않습니다 또는 오류하지 DISTINCT COUNT (), DISTINCT 캔을 사용할 수 있습니다. 마찬가지로, DISTINCT 열 이름을 사용하거나, 계산 식에 사용되지해야합니다.

DISTINCT는 MAX ()와 MIN ()를 사용할 수 있지만 이해가되지 않습니다.

10.3.7 결합 집계 함수

필요에 따라 사실 SELECT 문은 여러 집계 함수를 포함 할 수 있습니다 .

집계 함수를 사용하여, 그것은 별칭을 사용하는 것이 가장 좋습니다.


요약 : 집계 함수는 집계 데이터, 이러한 기능을 효율적으로 설계, 그들은 자신의 클라이언트가 훨씬 빠르게 컴퓨팅 애플리케이션보다 일반적으로 결과를 반환합니다.

10.4 데이터 패킷

이미로서 우리는 데이터를 요약하는 SQL 집계 함수를 배웠습니다. 그러나, 같은 : 많은 사람들이 남자와 여자가 ​​어떻게 학생 테이블을 필요합니다. 가능한 사용은 두 문장이 인쇄되었다. 패킷 : 여기에 또 다른 방법이있다.

패킷 : 논리 복수의 그룹으로 데이터 통합을 가능하도록, 각 그룹에 대해 계산되었다.

10.4.1 그룹 만들기

때 SELECT 문의 GROUP BY 절에 설립 그룹화합니다. 위의 예에 따르면, 남자와 여자 학생을위한 그룹화 시계 :

SELECT ssex, COUNT(ssex) AS total FROM student GROUP BY ssex;

출력 :

+---------+----------------+
| stu_sex |      total     |
+---------+----------------+
| 女      |              6 |
| 男      |             11 |
+---------+----------------+
3 rows in set (0.05 sec)

그러나 또한이처럼 사용할 수 있습니다 :

SELECT ssex, COUNT(*) AS total FROM student GROUP BY ssex;

상기 출력.

왜 이렇게입니까? ? GROUP BY를 사용하기 때문에, 각 그룹의 계산 및 평가했다 지정할 필요가 없습니다. 자동 시스템. GROUP BY MySQL의 데이터 패킷을 나타내는 절하고 각 그룹보다는 전체 결과 세트에 대한 집계.

GROUP BY 절의 특정 사용하기 전에 필요한 몇 가지 중요한 조항을 알고 :

  • GROUP BY 절은 컬럼의 수를 포함 할 수있다. 이 상세한 제어 데이터 패킷을 제공하기 위해, 패킷의 중첩을 가능하게한다.
  • 패킷이 절 BY 그룹에 중첩되어있는 경우, 데이터 패킷은 소정의 마지막에 통합 될 것이다. 즉, 패킷의 설립은, 모든 열이 계산으로 지정하는 경우 (당신은 개별 열에서 데이터를 검색 할 수 없습니다).
  • 절 BY 각 열 그룹은 열에 나열 또는 검색 유효한 식을 (하지만 집계 함수 없음)해야합니다. 당신이 SELECT에 표현식을 사용하는 경우 GROUP BY 절에서 같은 표현을 지정해야합니다. 당신은 별칭을 사용할 수 없습니다.
  • 집계 계산 문뿐만 아니라, 각 열에서 SELECT 문을 GROUP BY 절에 제시해야합니다.
  • 패킷이 열에 NULL 값 인 경우, NULL 패킷을 반환한다. 행의 열 A의 복수의 NULL 값들은 하나 개의 그룹으로 분할 될 경우.
  • GROUP BY 절 전에 BY 절 WHERE 절, ORDER에 나타나야합니다 후.

ROLLUP 키워드를 사용하면은 각 패킷의 요약과 (각 그룹에 대해) 각 패킷 레벨 값을 얻을 수 있습니다
예를 들어 :

SELECT ssex, COUNT(*) AS total 
FROM student 
GROUP BY ssex WITH ROLLUP;

출력 :

+---------+-------+
| stu_sex | total |
+---------+-------+
| 女      |    10 |
| 男      |    16 |
| NULL    |    26 |
+---------+-------+
3 rows in set (0.05 sec)

두 번째 파라미터는 NULL은 첫 번째 파라미터가 리턴하지 않으면 NULL 값이 반환되는 경우 제 발현이 NULL이 있는지 여부를 결정하기위한 IFNULL () 함수 : IFNULL (식 alt_value) 기능을 소개 값.

SELECT IFNULL(ssex,'总计')  AS ssex, COUNT(*) AS total 
FROM student 
GROUP BY ssex WITH ROLLUP;

출력 :

+---------+-------+
| stu_sex | total |
+---------+-------+
| 女      |    10 |
| 男      |    16 |
| 总计    |    26 |
+---------+-------+
3 rows in set (0.05 sec)

10.4.2 패킷 필터

MySQL은 패킷을 제외 패킷이 소정의 패킷을 포함하는, 필터링 허용한다. 그러나 WHERE 절은 그룹화보다는 필터 라인을 지정합니다. 그래서 MySQL은, WHERE 유사 HAVING 절, HAVING 절을 제공합니다 지금까지 절 HAVING 절 대신 사용할 수있는 WHERE 모든 종류의. 유일한 차이점은 WHERE 절 라인 필터이며, 필터 패킷 HAVING 절 (즉, 제 1 패킷은 필터링된다) .

예를 들어 : 소녀 또는 소년의 수는 학생을 보여주는 테이블보다 큰 15입니다.

SELECT ssex, COUNT(*) AS total 
FROM student 
GROUP BY ssex HAVING COUNT(*)>=15;

참고 :이 패킷 필터의 결과이기 때문에, GROUP BY 후 HAVING 절. WHERE 절은이 GROUP BY하기 전에해야하는 행을 필터링합니다. WHERE 그래서 절 필터 행을 그룹화하여 그룹의 결과에 영향을 미칠 수 있습니다 .

당신은 사용할 수 있습니다 모두 WHERE와 HAVING 절은 무엇입니까? ? 대답은 '예'입니다.

10.4.3 그룹화 및 정렬

정렬 (ORDER BY) 및 그룹화 (GROUP BY)의 차이에 대해 이야기 :

순서 패킷
생성되는 출력을 정렬 출력 패킷 순서는하지 않을 수 있습니다
모든 열이 사용될 수있다 (심지어 비 선택 열이 또한 사용될 수있다) 열 또는 표현식 열을 선택한 경우에만 사용하고 선택한 열 식의 각을 사용해야합니다
반드시 필요하지 않음 당신이 집계 함수 (또는 식)와 열 함께를 사용하는 경우, 당신은 사용해야합니다

위 테이블의 첫 번째 행은 종종 찾을 수있는 데이터는 실제로 GROUP BY 패킷 출력 패킷 순서이지만, 이것은 항상, 그것은 SQL 사양 필요하지 않은 경우가 아니다. 또한, 사용자는 패킷의 순차 순서는 다른 요구할 수있다. 당신이 특정 방식으로 데이터를 패킷해서, 당신이 방법 출력의 같은 종류 일 필요 의미하지 않는다. 그것은 그것의 효과는 GROUP BY 절의 출력에 해당하는 경우에도, BY 절 명확한 BRDER을 제공해야한다.

그것은 BY 절 절 ORDER BY 그룹과 함께 유지하기 위해 가장 좋습니다.

ORDER BY 절은 SQL의 마지막 문이어야합니다 : 어떻게 장소에 위치에 따라서.

이 예제는 매우 좋지 않았다 인용 작성하는 방법을 살펴 : 그래서 위의 문을 수정합니다.

SELECT ssex, COUNT(*) AS total 
FROM student 
GROUP BY ssex 
HAVING COUNT(*)>=15
ORDER BY ssex;

요약 : SQL 집계 함수를 사용하여 계산 된 데이터를 결합하는 방법에 대해 알아보십시오. GROUP UP 또한, 데이터 세트에서 이러한 집계 금 절 산을 사용하는 각 그룹의 결과를 반환하는 방법을 설명합니다. GROUP BY와 HAVING BY 절 특정 그룹을 HAVING 필터링 아무것도, 그리고 질서의 차이를 말할하려면

게시 57 개 원래 기사 · 원의 찬양 (18) · 전망 8741

추천

출처blog.csdn.net/weixin_41800884/article/details/104025145