sql >> Database teknologi >  >> RDS >> Database

Sådan sammenlignes to rækker fra samme tabel

Nogle gange skal du måske sammenligne på hinanden følgende rækker eller sammenligne hver række med forrige række i MySQL-tabellen. I denne artikel vil vi se på, hvordan man sammenligner to rækker fra samme tabel ved hjælp af selv-joins. Du kan bruge den til at sammenligne på hinanden følgende rækker eller få forskel på to rækker.


Sådan sammenlignes på hinanden følgende rækker i MySQL

Lad os sige, at du har følgende tabel salg (id, ordre_dato, beløb) og beløbskolonnen indeholder samlede akkumulerede salgsdata.

mysql> create table sales(id int auto_increment primary key,
 order_date date, amount int);

mysql> insert into sales(order_date, amount)
     values('2020-10-01',100),
     ('2020-10-02',125),
     ('2020-10-03',140),
     ('2020-10-04',160);

mysql> select * from sales;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-10-01 |    100 |
|    2 | 2020-10-02 |    125 |
|    3 | 2020-10-03 |    140 |
|    4 | 2020-10-04 |    160 |
+------+------------+--------+

Bonus Læs:Sådan sammenligner du to kolonner i MySQL

I vores eksempel, hvis du vil finde ud af salg foretaget på hver dag, skal du sammenligne hver rækkes beløbsværdi med værdien i den foregående række. Her er SQL-forespørgslen til at sammenligne hver række med forrige række.

mysql> SELECT
         g1.id, g1.order_date,g1.amount,
         (g2.amount - g1.amount) AS daily_amount
     FROM
         sales g1 INNER JOIN sales g2 ON g2.id = g1.id + 1;
+------+------------+--------+--------------+
| id   | order_date | amount | daily_amount |
+------+------------+--------+--------------+
|    1 | 2020-10-01 |    100 |           25 |
|    2 | 2020-10-02 |    125 |           15 |
|    3 | 2020-10-03 |    140 |           20 |
+------+------------+--------+--------------+

I ovenstående forespørgsel forbinder vi salgstabellen med sig selv ved hjælp af en INNER JOIN-betingelse g2.id=g1.id + 1, der giver dig mulighed for at sammenligne hver række med dens forrige række.

Bonus Læs:Sådan får du hver Nth Row i MySQL

Bemærk venligst, at denne betingelse afhænger af, at vores id-kolonne har fortløbende numre. De fleste tabeller har en primær nøglekolonne med automatisk stigning, så den burde fungere i de fleste tilfælde. Hvis de afviger med en anden konstant, kan du ændre INNER JOIN-tilstanden i overensstemmelse hermed.

Forhåbentlig kan du nu nemt sammenligne to rækker i samme tabel i MySQL.

Ubiq gør det nemt at visualisere data og overvåge dem i dashboards i realtid. Prøv Ubiq gratis.

  1. Vigtigheden af ​​at vedligeholde en HIPAA-kompatibel database

  2. KNIME

  3. Hvordan kan jeg oprette en begrænsning for at kontrollere, om en e-mail er gyldig i postgres?

  4. Hvordan kan jeg bruge Date Datatype i sql server?