Home Database Mysql Tutorial How to get the Nth record in each group in Mysql

How to get the Nth record in each group in Mysql

Nov 22, 2016 am 10:47 AM
mysql

Problem background

1) Restrictions: Each user can enjoy up to 4 free discounts for orders in one category.

That is, when counting the number of orders that have enjoyed the free shipping discount, orders placed after the fourth order in the same category need to be excluded.

How to get the ID of the fourth order in the same category for each user?

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

Unfortunately, Mysql does not have a grouping function to easily get the fourth id in each group. But there can be workarounds, such as the following table

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 |
+----+--------+----------------------------------+
Copy after login

How to get the order of each user's second successful payment (status='10')?

How to get the Nth record in each group in Mysql

Method 1 - Query

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

Option 2 - One-time query

SELECT 
    *
FROM
    (SELECT 
        id,
            user_id,
            @rank:=IF(@current_user_id = user_id, @rank + 1, 1) rank,
            @current_user_id:=user_id
    FROM
        (SELECT @current_user_id:=NULL, @rank:=NULL) vars, t
    WHERE
        t.status = '10'
    ORDER BY user_id , id) a
WHERE
    rank = 2;
    
+----+----------------------------------+------+----------------------------------+
| id | user_id                          | rank | @current_user_id:=user_id        |
+----+----------------------------------+------+----------------------------------+
|  2 | 24e568a88fae11e6bb0650b497d97cdd |    2 | 24e568a88fae11e6bb0650b497d97cdd |
|  7 | e8669ac28fae11e6bb0650b497d97cdd |    2 | e8669ac28fae11e6bb0650b497d97cdd |
Copy after login

Explanation of principle

First sort by user_id and id, and then assign serial numbers starting from 1, the same user will be incremented, different users Then start again from 1.


Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP's big data structure processing skills PHP's big data structure processing skills May 08, 2024 am 10:24 AM

PHP's big data structure processing skills

How to optimize MySQL query performance in PHP? How to optimize MySQL query performance in PHP? Jun 03, 2024 pm 08:11 PM

How to optimize MySQL query performance in PHP?

How to use MySQL backup and restore in PHP? How to use MySQL backup and restore in PHP? Jun 03, 2024 pm 12:19 PM

How to use MySQL backup and restore in PHP?

What are the application scenarios of Java enumeration types in databases? What are the application scenarios of Java enumeration types in databases? May 05, 2024 am 09:06 AM

What are the application scenarios of Java enumeration types in databases?

How to insert data into a MySQL table using PHP? How to insert data into a MySQL table using PHP? Jun 02, 2024 pm 02:26 PM

How to insert data into a MySQL table using PHP?

How to fix mysql_native_password not loaded errors on MySQL 8.4 How to fix mysql_native_password not loaded errors on MySQL 8.4 Dec 09, 2024 am 11:42 AM

How to fix mysql_native_password not loaded errors on MySQL 8.4

How to use MySQL stored procedures in PHP? How to use MySQL stored procedures in PHP? Jun 02, 2024 pm 02:13 PM

How to use MySQL stored procedures in PHP?

Performance optimization strategies for PHP array paging Performance optimization strategies for PHP array paging May 02, 2024 am 09:27 AM

Performance optimization strategies for PHP array paging

See all articles