ホームページ >データベース >mysql チュートリアル >MySQLで各グループのN番目のレコードを取得する方法

MySQLで各グループのN番目のレコードを取得する方法

高洛峰
高洛峰オリジナル
2016-11-22 10:47:241292ブラウズ

問題の背景

1) 制限: 各ユーザーは、1 つのカテゴリの注文に対して最大 4 つの無料割引を享受できます。

つまり、送料無料割引を享受した注文数をカウントする場合、同じカテゴリ内の 4 回目の注文以降の注文は除外する必要があります。

同じカテゴリ内の 4 回目の注文の ID を取得する方法。ユーザーごとに?

select fourth(id) from order group by user_id, category;

残念ながら、Mysql には、各グループの 4 番目の ID を簡単に取得するためのグループ化機能がありません。ただし、回避策はあります。たとえば、次のようなテーブルがある場合、各ユーザーの 2 番目に成功した支払い (status='10') の順序を取得するにはどうすればよいでしょうか。

MySQLで各グループのN番目のレコードを取得する方法方法 1 -

select * from t;
+----+--------+----------------------------------+
| id | status | user_id                          |
+----+--------+----------------------------------+
|  1 | 10     | 24e568a88fae11e6bb0650b497d97cdd |
|  2 | 10     | 24e568a88fae11e6bb0650b497d97cdd |
|  3 | 20     | 24e568a88fae11e6bb0650b497d97cdd |
|  4 | 20     | 24e568a88fae11e6bb0650b497d97cdd |
|  5 | 10     | e8669ac28fae11e6bb0650b497d97cdd |
|  6 | 20     | e8669ac28fae11e6bb0650b497d97cdd |
|  7 | 10     | e8669ac28fae11e6bb0650b497d97cdd |
|  8 | 20     | e8669ac28fae11e6bb0650b497d97cdd |
|  9 | 10     | e8669ac28fae11e6bb0650b497d97cdd |
+----+--------+----------------------------------+
を 1 つずつクエリする

オプション 2 - 1 回限りのクエリ

select * from t where user_id = '24e568a88fae11e6bb0650b497d97cdd' and status = '10' order by id limit 1,1;
+----+--------+----------------------------------+
| id | status | user_id                          |
+----+--------+----------------------------------+
|  2 | 10     | 24e568a88fae11e6bb0650b497d97cdd |
+----+--------+----------------------------------+

原理説明

最初に user_id と id で並べ替え、次に 1 から始まるシリアル番号を割り当てると、同じユーザーが増加、別のユーザー 次に、1 からやり直します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。