表字段及数据: | |||
---|---|---|---|
id | amount | user_id | create_time |
1 | 100 | 1 | 2016-10-11 10:59:33 |
2 | 3000 | 2 | 2016-10-10 10:59:54 |
3 | 3256 | 1 | 2016-10-09 11:00:16 |
4 | 1546 | 1 | 2016-10-08 11:00:38 |
我想取每个user的第一条记录,
SQL:select * from test group by user_id.
结果: | |||
---|---|---|---|
id | amount | user_id | create_time |
1 | 100 | 1 | 2016-10-11 10:59:33 |
2 | 3000 | 2 | 2016-10-10 10:59:54 |
然后我发现如果根据时间来排序,无论是顺序还是逆序他都是这个结果,然后我猜想这个结果是不是根据id的大小来的,结果我改了id也是一样,然后我猜想group by 结果是根据记录添加顺序来决定的,当group by的字段出现重复时,只会取第一条记录,不知道这样对不对,求解答?
create_time을 추가하지 않아도 마찬가지입니다. 레코드의 순서가 이미 규칙적이고 정렬이 없기 때문입니다. 실제로 Group by 후에는 전체 레코드에서 처음으로 user_id가 나타나는 레코드만 가져옵니다. 나가
'첫 번째 기록'은 어떤 순서로 말하는 건가요? 데이터베이스 테이블 자체에는 특정 순서가 미리 설정되어 있지 않습니다. 중복 없이
으아악id
및id
을 기준으로 정렬한다고 가정합니다.효과가 있을 것입니다.
그룹별은 기본키 순서대로 표시되는 결과입니다.
으아아아최신 금액을 표시하려면 그룹 내에서 정렬해야 합니다.
이러한 이해는 틀릴 수도 있고 맞을 수도 있습니다.
SQL 표준에 따르면 SQL에 그룹화가 있으면 그룹화 열만 유효한 데이터이기 때문에 틀렸습니다.
user_id로 테스트 그룹에서 *를 선택하세요. 이 줄은 user_id 열만 의미합니다. True 데이터이고, 그 외의 컬럼은 False이며, 선택하여도 사용할 수 없습니다.
그러나 MySql의 경우 동작은 설명하신 것과 정확히 같습니다.