2017-03-13 1 views
-1

나는 다음과 같은 데이터 세트 (Original Image) 반환하는 쿼리 한 :이 데이터 집합을 결과 쿼리에, GROUPBY가을 col_0_0 적용 할 때 이제MySQL의 GROUPBY 값은

+ ------------- + -------- + ---------- + ------------------------ + ------------------- + --------- + ----------------------- + ---------------------- + ----------------- + 
| col_0_0_  | col_1_0_ | col_2_0_ | col_3_0_     | col_4_0_   | col_5_0_ | col_6_0_    | col_7_0_    | col_8_0_   | 
+ ------------- + -------- + ---------- + ------------------------ + ------------------- + --------- + ----------------------- + ---------------------- + ----------------- + 
| LAI-100003662 | dsa  | 4546576766 | [email protected] | 2015-11-30 02:30:11 | Sultanpur | Incomplete Applications | Application Incomplete | Documents Pending | 
| LAI-100003662 | dsa  | 4546576766 | [email protected] | 2015-11-30 02:30:11 | Sultanpur | Incomplete Applications | Null     | Null    | 
+ ------------- + -------- + ---------- + ------------------------ + ------------------- + --------- + ----------------------- + ---------------------- + ----------------- + 

을, 난 단지 얻을 만 하나의 행 (Original Image) :

+ ------------- + -------- + ---------- + ------------------------ + ------------------- + --------- + ----------------------- + ---------------------- + ----------------- + 
| col_0_0_  | col_1_0_ | col_2_0_ | col_3_0_     | col_4_0_   | col_5_0_ | col_6_0_    | col_7_0_    | col_8_0_   | 
+ ------------- + -------- + ---------- + ------------------------ + ------------------- + --------- + ----------------------- + ---------------------- + ----------------- + 
| LAI-100003662 | dsa  | 4546576766 | [email protected] | 2015-11-30 02:30:11 | Sultanpur | Incomplete Applications | Application Incomplete | Documents Pending | 
+ ------------- + -------- + ---------- + ------------------------ + ------------------- + --------- + ----------------------- + ---------------------- + ----------------- + 

1) 왜 GROUP BY는 나에게 첫 번째 행이 아닌 원본 데이터 셋에서 두 번째 행을 주는가?

2)이 시나리오에서 GROUP BY은 실제로 어떻게 작동합니까? GROUP BY와

SQL 쿼리 :

select loan0_.col_0_0_, 
     loan0_.col_1_0_, 
     loan0_.col_2_0_, 
     loan0_.col_3_0_, 
     loan0_.col_4_0_, 
     loan0_.col_5_0_, 
     dsastatus2_.col_6_0_, 
     dsastatus2_.col_7_0_, 
     dsastatus2_.col_8_0_ 
    FROM loan0_ 
    cross join user1_ 
    cross join dsastatus2_ 
    where loan0_.L_USER_ID=user1_.U_GUID 
     and loan0_.L_LEADSOURCE='DSA' 
     and (loan0_.L_SUB_STATUS_ID=dsastatus2_.ADMIN_STATUS_ID 
      or loan0_.L_STATUS_ID=dsastatus2_.ADMIN_STATUS_ID) 
     and user1_.U_REFID='dsa001' 
     and (loan0_.L_APPLICATION_ID like 'LAI-100003662') 
    GROUP BY col_0_0_ ; 
+0

귀하의 sql 코드를 보여주십시오 .. 코드없이 img 의미 nothings – scaisEdge

+0

[docs] (https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html) 이 경우 서버는 각 그룹에서 임의의 값을 자유롭게 선택할 수 있기 때문에 동일하지 않으면 선택한 값이 " – xQbert

+0

' MySQL' 일부 신의 가짜 이유로 인해 GROUP BY를 쿼리에 추가 할 수 있습니다 모든 집계되지 않은 열을 지정하지 않아도됩니다. 이렇게하면 임의로 * 반환 할 레코드를 선택합니다. 두 번째 질문에 대답하기 위해 : 그것은 아닙니다. 그러나 귀하의 첫 번째 질문에 대답하기 위해 'GROUP BY (더 나은 설명이 부족하기 때문에 ...)는 제공된 값으로 결과 집합을 그룹화합니다. 두 레코드는 'col_0_0'에 대해 동일한 값을 갖기 때문에 함께 그룹화됩니다. 이것은 단지 집계로 수행되어야합니다. 집합이없는 'GROUP BY'는 실제로 결과가 무엇인지에 대해별로 의미가 없습니다. – Siyual

답변

0

직접 질문에 대답하려면 :

1) 왜 나만에게 원본 데이터 셋의 첫 번째 행이 아닌 두 번째 행을 줄 BY GROUP을한다 ? 이것이 MSQL 엔진의 작동 방식입니다. 문서를 읽으십시오. 서버는 각 그룹 (그룹 기준이 아님)에서 자유롭게 선택할 수 있으므로 동일하지 않으면 선택된 값이 불확실합니다. "

2) GROUP BY는 실제로이 시나리오에서 어떻게 작동합니까?

MySQL이 문서에서 직접 인용으로 그룹을 확장 위 참조 : 옵션 기능의 T301 당

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

SQL99

나중에 허가 등 nonaggregates을 그들이 열 BY GROUP에 기능적으로 의존하는 경우 : 이러한 관계의 경우 name과 custid 사이에 존재하면 쿼리가 유효합니다. 예를 들어 고객의 주요 열쇠 인 경우입니다.

MySQL 5.7.5 이상에서는 기능 종속성 감지 기능을 구현합니다. ONLY_FULL_GROUP_BY SQL 모드가 활성화 된 경우 (기본적으로), MySQL은 SELECT 목록, HAVING 조건 또는 ORDER BY 목록이 GROUP BY 절에 이름이 지정되지 않았거나 기능적으로 종속적이지 않은 집계되지 않은 열을 참조하는 쿼리를 거부합니다 . (5.7.5하기 전에, MySQL은 기능 종속성을 감지하지 않고 ONLY_FULL_GROUP_BY은 기본적으로 사용되지 않습니다. 전 5.7.5의 행동에 대한 설명을 참조 MySQL의 5.6 참조 설명서를.)

을 ONLY_FULL_GROUP_BY이 비활성화 된 경우, MySQL의를 GROUP BY의 표준 SQL 사용을 확장하면 선택 목록, HAVING 조건 또는 ORDER BY 목록에서 열이 기능적으로 GROUP BY 열에 종속되어 있지 않더라도 비 집합 열을 참조 할 수 있습니다. 이로 인해 MySQL은 앞의 쿼리를 받아들입니다. 이 경우 서버는 각 그룹에서 임의의 값을 자유롭게 선택할 수 있으므로 동일하지 않으면 선택되지 않은 값이이며 원하는 것은 아닐 수 있습니다. 또한 각 그룹의 값 선택은 ORDER BY 절을 추가하여 영향을받을 수 없습니다. 결과 집합 정렬은 값을 선택한 후에 발생하며 ORDER BY는 서버가 선택한 각 그룹 내의 값에 영향을주지 않습니다. ONLY_FULL_GROUP_BY를 사용 불가능하게하는 것은 데이터의 일부 특성으로 인해 GROUP BY에 이름이 지정되지 않은 각 집계되지 않은 열의 모든 값이 각 그룹에 대해 동일하다는 것을 알고있을 때 주로 유용합니다.

0

GROUP BY가 수행하는 것이기 때문에 한 줄만 표시되는 이유는 동일한 값을 가진 레코드를 하나로 결합하기 때문입니다. 이 경우 값은 LAI-1000 ... 3662가 하나의 값입니다.

대부분의 SQL 시스템에서 group by 또는 aggregate 함수에없는 열을 포함하면 오류가 발생하지만 mysql에서는 다른 열의 가능성으로부터 임의 값을 얻을 수 있습니다.