关于MySQL group by的问题
ringa_lee
ringa_lee 2017-04-17 15:44:15
0
4
718
表字段及数据:
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_lee
ringa_lee

ringa_lee

全員に返信(4)
阿神

create_time を追加しなくても同じです。レコード内の順序がすでに規則的であり、実際には、group by の後、すべてのレコードの中で user_id が最初に出現するレコードのみが取得されます。アウト

いいねを押す +0
阿神

あなたのいわゆる「最初のレコード」はどのような順序で「最初」を意味しますか?データベース テーブル自体には、特定の順序が事前設定されていません。 idid で重複せずに並べ替えたいとします:

リーリー

これでうまくいくはずです。

いいねを押す +0
大家讲道理

Group byは主キー順に表示される結果です。
最新の金額を表示するには、グループ内で並べ替える必要があります。

リーリー
いいねを押す +0
洪涛

この理解は間違っている場合もあれば、正しい場合もあります。

  1. SQL 標準によれば、SQL にグループ化がある場合、グループ化列のみが有効なデータであるため、私は間違っています。
    user_id によるテスト グループから * を選択します。この行は、列 user_id のみを意味します。は True データ、その他の列は False で、選択されていても使用できません。

  2. しかし、MySql の場合、その動作はあなたが説明したとおりです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート