Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

WHERE 절과 조건 수가 1보다 큰 MySQL GROUP BY?

<시간/>

group by with where 절을 이해하기 위해 테이블을 생성해 보겠습니다. 테이블을 생성하는 쿼리는 다음과 같습니다 -

mysql> 테이블 GroupByWithWhereClause 생성 -> ( -> Id int NOT NULL AUTO_INCREMENT, -> IsDeleted tinyint(1), -> MoneyStatus varchar(20), -> UserId int, -> PRIMARY KEY(Id) -> );쿼리 OK, 영향을 받은 행 0개(0.57초)

이제 insert 명령을 사용하여 테이블에 일부 레코드를 삽입할 수 있습니다. 쿼리는 다음과 같습니다 -

mysql> insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'Undone',101);Query OK, 1행 영향(0.17초)mysql> Insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values( 0,'done',101);쿼리 OK, 1행 영향(0.19초)mysql> Insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'done',101);쿼리 OK, 1행 영향(0.14 sec)mysql> Insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'done',102);Query OK, 영향을 받는 1행(0.18초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) 값(1)에 삽입 ,'Undone',102);쿼리 OK, 1행 영향(0.20초)mysql> Insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(1,'done',102);쿼리 OK, 1행 영향(0.59초) )mysql> Insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'Undone',103);Query OK, 영향을 받는 행 1개(0.15초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) 값(0, '완료',103); 쿼리 확인, 1행 영향(0.20초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'done',103)에 삽입 ,MoneyStatus,UserId) values(0,'done',103);Query OK, 1개의 row가 영향을 받습니다(0.10초)mysql> insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'done',104);Query OK, 1개 행이 영향을 받았습니다(0.14초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) 값에 삽입(0,'Undone',104);쿼리 확인, 1행이 영향을 받았습니다(0.12초)mysql> GroupByWithWhereClause(IsDeleted, MoneyStatus,UserId) values(1,'Undone',105);Query OK, 1개의 row가 영향을 받았음(0.15초)mysql> insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(1,'done',105);Query OK , 영향을 받는 행 1개(0.26초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(1,'done',105)에 삽입; 쿼리 확인, 영향을 받는 행 1개(0.12초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus에 삽입) ,유 serId) values(0,'done',105);Query OK, 1개의 row가 영향을 받습니다(0.24초)mysql> insert into GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) values(0,'Undone',106);Query OK, 1 영향을 받은 행(0.23초)mysql> GroupByWithWhereClause(IsDeleted,MoneyStatus,UserId) 값(0,'done',106)에 삽입 ) values(0,'done',106);쿼리 OK, 1행 영향(0.14초)

select 문을 사용하여 테이블의 모든 레코드를 표시합니다.

쿼리는 다음과 같습니다 -

mysql> 선택 * from GroupByWithWhereClause;

다음은 출력입니다 -

+----+-----------+------------+--------+| 아이디 | 삭제됨 | 머니상태 | 사용자 ID |+----+-----------+-------------+--------+| 1 | 0 | 실행 취소 | 101 || 2 | 0 | 완료 | 101 || 3 | 0 | 완료 | 101 || 4 | 0 | 완료 | 102 || 5 | 1 | 실행 취소 | 102 || 6 | 1 | 완료 | 102 || 7 | 0 | 실행 취소 | 103 || 8 | 0 | 완료 | 103 || 9 | 0 | 완료 | 103 || 10 | 0 | 완료 | 103 || 11 | 0 | 완료 | 104 || 12 | 0 | 실행 취소 | 104 || 13 | 1 | 실행 취소 | 105 || 14 | 1 | 완료 | 105 || 15 | 1 | 완료 | 105 || 16 | 0 | 완료 | 105 || 17 | 0 | 실행 취소 | 106 || 18 | 0 | 완료 | 106 || 19 | 0 | 완료 | 106 |+-+-----------+-------------+--------+19행 세트(0.00초) )

다음은 WHERE 절을 사용하여 GROUP BY에 대한 쿼리입니다. -

mysql> SELECT * FROM GroupByWithWhereClause -> WHERE IsDeleted=0 AND MoneyStatus='done' -> GROUP BY SUBSTR(UserId,1,3) -> HAVING COUNT(*)> 1 -> ORDER BY Id DESC; 

다음은 출력입니다 -

+----+-----------+------------+--------+| 아이디 | 삭제됨 | 머니상태 | 사용자 ID |+----+-----------+-------------+--------+| 18 | 0 | 완료 | 106 || 8 | 0 | 완료 | 103 || 2 | 0 | 완료 | 101 |+-+-----------+------------+--------+3행 세트(0.00초) )