sql >> Database >  >> RDS >> Mysql

Hoe u elke N-de rij in MySQL kunt krijgen

Soms moet u elke n-de rij in MySQL krijgen, of elke n-de rij in uw tabel retourneren. In dit artikel zullen we bekijken hoe je elke n-de rij in MySQL kunt selecteren.


Hoe u elke N-de rij in MySQL kunt krijgen

We zullen twee manieren bekijken om elke N-de rij in een tabel te krijgen:wanneer je een id-achtige kolom hebt met opeenvolgende nummers erin, en wanneer je er geen hebt.

Stel dat u de volgende tabel verkoop (id, bedrag) . heeft . Voor ons eerste voorbeeld bevat de ID-kolom opeenvolgende rij-ID's - 1, 2, 3, ...

mysql> create table sales(id int, amount int);
mysql> insert into sales(id,amount)
       values(1,100),
       (2,300),
       (3,250),
       (4,150),
       (5,200);

mysql> select * from sales;
+----+--------+
| id | amount |
+----+--------+
|  1 |    100 |
|  2 |    300 |
|  3 |    250 |
|  4 |    150 |
|  5 |    200 |
+----+--------+

Bonus lezen:hoe u automatische verhoging in een bestaande tabel kunt toevoegen

Hier is de SQL-query om elke n-de rij in MySQL te selecteren.

mysql> select * from table_name where table_name.id mod n = 0;

In de bovenstaande zoekopdracht selecteren we in principe elke rij waarvan id mod n waarde evalueert tot nul. Dus we krijgen rijen met id n, 2n, 3n, ... Vervang table_name met uw tabelnaam en n met elke n-de rij die u wilt retourneren.

Hier is een voorbeeld om elke 2e rij uit de verkooptabel te retourneren.

mysql> select * from sales where sales.id mod 2 = 0;
+----+--------+
| id | amount |
+----+--------+
|  2 |    300 |
|  4 |    150 |
+----+--------+

Bonus Lezen:Hoe de n-de rij in MySQL te vinden

Als uw tabel geen id-achtige kolom heeft met opeenvolgende nummers opgeslagen, dan is hier de SQL-query om elke n-de rij uit de tabel te halen.

Stel dat u de volgende tabel verkoop(order_date, hoeveelheid) . heeft die geen id-achtige kolom heeft.

mysql> create table sales2(order_date date, amount int);

mysql> insert into sales2(order_date,amount)
       values('2020-10-01',100),
       ('2020-10-02',300),
       ('2020-10-03',250),
       ('2020-10-04',150),
       ('2020-10-05',200);

mysql> select * from sales2;
+------------+--------+
| order_date | amount |
+------------+--------+
| 2020-10-01 |    100 |
| 2020-10-02 |    300 |
| 2020-10-03 |    250 |
| 2020-10-04 |    150 |
| 2020-10-05 |    200 |
+------------+--------+

Bonus lezen:MySQL-database repliceren naar een andere server

Hier is de SQL-query om elke n-de rij in MySQL op te halen.

SELECT * 
FROM ( 
    SELECT 
        @row := @row +1 AS rownum, [column name] 
    FROM ( 
        SELECT @row :=0) r, [table name] 
    ) ranked 
WHERE rownum % [n] = 0

Vervang in de bovenstaande query [n] door de n-de rij die u wilt krijgen, vervang [tabelnaam] door uw tabelnaam en [kolomnaam] door uw kolomnaam.

In de bovenstaande query gebruiken we geneste query's. In de inner query evalueert en wijst het rijnummer toe aan elke rij en slaat het op in een tijdelijke variabele genaamd rownum. De buitenste query selecteert rijen met rownum mod n-waarde als nul.

Hier is de SQL-query om elke 2e rij in MySQL te selecteren.

mysql> SELECT *
       FROM (
           SELECT
              @row := @row +1 AS rownum, amount
          FROM (
              SELECT @row :=0) r, sales2
          ) ranked
      WHERE rownum % 2 = 0;
+--------+--------+
| rownum | amount |
+--------+--------+
|      2 |    300 |
|      4 |    150 |
+--------+--------+

Hopelijk helpt dit artikel je om elke n-de rij in MySQL te selecteren.

Ubiq maakt het eenvoudig om data te visualiseren en te monitoren in realtime dashboards. Probeer Ubiq gratis.

  1. Hoe negeer ik ampersands in een SQL-script dat wordt uitgevoerd vanuit SQL Plus?

  2. Beveiligingsaudits automatiseren voor PostgreSQL

  3. INNODB inschakelen in mysql

  4. Hoe de identiteitskolomwaarde in de SQL Server-tabel opnieuw in te stellen - SQL Server / T-SQL-zelfstudiedeel 43