2013-07-22 3 views
1

테이블에 사용자 정보가 있습니다.열 이름없이 MySQL 그룹

select * from accounts group by cid; 

그냥 예를 들어, sum() 같은 집계 함수와 일반 group by 작품 : 문에 의해

mysql> desc accounts; 
+-------------+------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-------------+------------+------+-----+---------+----------------+ 
| cid   | int(11) | NO | PRI | NULL | auto_increment | 
| username | text  | YES |  | NULL |    | 
| password | text  | YES |  | NULL |    | 
| mysignature | text  | YES |  | NULL |    | 
| is_admin | varchar(5) | YES |  | NULL |    | 
+-------------+------------+------+-----+---------+----------------+ 
5 rows in set (0.01 sec) 

정상 그룹은 항상 다음과 같은 하나 이상의 열 이름으로 다음과 같습니다.

mysql> select username from accounts group by now(); 
+----------+ 
| username | 
+----------+ 
| admin | 
+----------+ 
1 row in set (0.00 sec) 

나는 새로운 MySQL의에서 오전 :

나는 일부는 이해하지 못할 열 이름없이 표현에 의해 다음과 발견했다. 이 쿼리는 어떻게 작동합니까? 감사합니다. .

+2

'GROUP BY' 절은 단순히 열 이름 일 수있는 하나 이상의 * 표현식을 포함하지만 레코드가 속한 그룹을 판별하기 위해 각 레코드에 대해 평가되는 다른 것일 수도 있습니다. 'NOW()'의 경우 모든 레코드에 대해 결과가 동일하므로 모든 레코드가 같은 그룹에 저장됩니다. 그러한 모든 레코드가'username'과 같은 값을 가지지 않는 한, 선택 될 것은 * indeterminate *입니다. [GROUP BY'에 대한 MySQL 확장] (http://dev.mysql.com/doc/en/group-by-extensions.html)을 참조하십시오. – eggyal

+1

그것은 '성명 별 일반 그룹'입니까? 집계 함수가 없으면 GROUP BY의 사용은 전적으로 부적절합니다. 다른 많은 RDMS와 달리 MySQL은 쓰레기를 공급할 때 오류가 발생하지 않도록 최선을 다합니다. 이것의 지혜는 의심스럽고 격렬하게 토론됩니다. 귀하의 질의는 의미가 없으므로 설명을하려고하면 (아마도) 무의미하며 내 보너스 이상입니다. – Strawberry

답변

0

사실 그것은 표현식입니다. 그룹화에 대한 열 값 대신 표현식 결과를 비교합니다.

+0

SQL 쿼리를 단계별로 추적 할 수있는 도구가 있습니까? –

0

now() 그룹별로 기능이 그렇게 효과적이지 않습니다.

항상 선택한 데이터에서 첫 번째 행을 반환합니다.

쿼리의 group by 절에 항상 열 이름을 지정해야합니다. 다음은 group by의 튜토리얼의 link입니다. 그룹별로 사용할 수있는 집계 함수를 지정합니다.

now() 반환하는 그룹은 검색어에서 데이터를 선택하고 첫 번째와 일치하며 첫 번째 행이됩니다.