sql >> Databáze >  >> RDS >> Database

Jak porovnat dva řádky ze stejné tabulky

Někdy může být nutné porovnat po sobě jdoucí řádky nebo porovnat každý řádek s předchozím řádkem v tabulce MySQL. V tomto článku se podíváme na to, jak porovnat dva řádky ze stejné tabulky pomocí vlastních spojení. Můžete jej použít k porovnání po sobě jdoucích řádků nebo k získání rozdílu mezi dvěma řádky.


Jak porovnávat po sobě jdoucí řádky v MySQL

Řekněme, že máte následující tabulku prodej (ID, datum_objednávky, částka) a sloupec částka obsahuje celkové kumulativní údaje o prodeji.

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 |
+------+------------+--------+

Bonusové čtení:Jak porovnat dva sloupce v MySQL

V našem příkladu, pokud chcete zjistit prodeje uskutečněné každý den, musíte porovnat hodnotu částky každého řádku s hodnotou v předchozím řádku. Zde je dotaz SQL pro porovnání každého řádku s předchozím řádkem.

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 |
+------+------------+--------+--------------+

Ve výše uvedeném dotazu spojujeme tabulku prodejů sama se sebou pomocí podmínky INNER JOIN g2.id=g1.id + 1, která vám umožňuje porovnat každý řádek s předchozím řádkem.

Bonusové čtení:Jak získat každý N-tý řádek v MySQL

Upozorňujeme, že tato podmínka závisí na skutečnosti, že náš sloupec id má po sobě jdoucí čísla. Většina tabulek má sloupec primárního klíče s automatickým přírůstkem, takže by měl ve většině případů fungovat. Pokud se liší nějakou jinou konstantou, můžete podle toho upravit podmínku INNER JOIN.

Doufejme, že nyní můžete snadno porovnat dva řádky ve stejné tabulce v MySQL.

Ubiq usnadňuje vizualizaci dat a jejich sledování na řídicích panelech v reálném čase. Vyzkoušejte Ubiq zdarma.

  1. ekvivalent onbeforeprint() a onafterprint() pro prohlížeče bez IE

  2. ROLLBACK TRUNCATE v SQL Server

  3. Jak duplikovat tabulku v MySQL

  4. Vložte více řádků s připravenými výkazy CHOP