表字段及数据: | |||
---|---|---|---|
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的字段出现重复时,只会取第一条记录,不知道这样对不对,求解答?
阿神2017-04-17 15:46:15
create_time을 추가하지 않아도 마찬가지입니다. 레코드의 순서가 이미 규칙적이고 정렬이 없기 때문입니다. 실제로 Group by 후에는 전체 레코드에서 처음으로 user_id가 나타나는 레코드만 가져옵니다. 나가
阿神2017-04-17 15:46:15
'첫 번째 기록'은 어떤 순서로 말하는 건가요? 데이터베이스 테이블 자체에는 특정 순서가 미리 설정되어 있지 않습니다. 중복 없이 id
및 id
을 기준으로 정렬한다고 가정합니다.
효과가 있을 것입니다.
PHP中文网2017-04-17 15:46:15
이러한 이해는 틀릴 수도 있고 맞을 수도 있습니다.
SQL 표준에 따르면 SQL에 그룹화가 있으면 그룹화 열만 유효한 데이터이기 때문에 틀렸습니다.
user_id로 테스트 그룹에서 *를 선택하세요. 이 줄은 user_id 열만 의미합니다. True 데이터이고, 그 외의 컬럼은 False이며, 선택하여도 사용할 수 없습니다.
그러나 MySql의 경우 동작은 설명하신 것과 정확히 같습니다.