찾다

 >  Q&A  >  본문

关于MySQL group by的问题

表字段及数据:
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的字段出现重复时,只会取第一条记录,不知道这样对不对,求解答?

ringa_leeringa_lee2834일 전740

모든 응답(4)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 15:46:15

    create_time을 추가하지 않아도 마찬가지입니다. 레코드의 순서가 이미 규칙적이고 정렬이 없기 때문입니다. 실제로 Group by 후에는 전체 레코드에서 처음으로 user_id가 나타나는 레코드만 가져옵니다. 나가

    회신하다
    0
  • 阿神

    阿神2017-04-17 15:46:15

    '첫 번째 기록'은 어떤 순서로 말하는 건가요? 데이터베이스 테이블 자체에는 특정 순서가 미리 설정되어 있지 않습니다. 중복 없이 idid을 기준으로 정렬한다고 가정합니다.

    으아악

    효과가 있을 것입니다.

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:46:15

    그룹별은 기본키 순서대로 표시되는 결과입니다.
    최신 금액을 표시하려면 그룹 내에서 정렬해야 합니다.

    으아아아

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-17 15:46:15

    이러한 이해는 틀릴 수도 있고 맞을 수도 있습니다.

    1. SQL 표준에 따르면 SQL에 그룹화가 있으면 그룹화 열만 유효한 데이터이기 때문에 틀렸습니다.
      user_id로 테스트 그룹에서 *를 선택하세요. 이 줄은 user_id 열만 의미합니다. True 데이터이고, 그 외의 컬럼은 False이며, 선택하여도 사용할 수 없습니다.

    2. 그러나 MySql의 경우 동작은 설명하신 것과 정확히 같습니다.

    회신하다
    0
  • 취소회신하다