検索

ホームページ  >  に質問  >  本文

关于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_lee2846日前747

全員に返信(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

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

    リーリー

    返事
    0
  • PHP中文网

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

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

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

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

    返事
    0
  • キャンセル返事