表字段及数据: | |||
---|---|---|---|
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
で重複せずに並べ替えたいとします:これでうまくいくはずです。
Group byは主キー順に表示される結果です。
リーリー最新の金額を表示するには、グループ内で並べ替える必要があります。
この理解は間違っている場合もあれば、正しい場合もあります。
SQL 標準によれば、SQL にグループ化がある場合、グループ化列のみが有効なデータであるため、私は間違っています。
user_id によるテスト グループから * を選択します。この行は、列 user_id のみを意味します。は True データ、その他の列は False で、選択されていても使用できません。
しかし、MySql の場合、その動作はあなたが説明したとおりです。