Database
 sql >> Baza danych >  >> RDS >> Database

Jak porównać dwa wiersze z tej samej tabeli?

Czasami może być konieczne porównanie kolejnych wierszy lub porównanie każdego wiersza z poprzednim wierszem w tabeli MySQL. W tym artykule przyjrzymy się, jak porównać dwa wiersze z tej samej tabeli przy użyciu sprzężeń własnych. Możesz go użyć do porównania kolejnych rzędów lub uzyskania różnicy między dwoma rzędami.


Jak porównać kolejne wiersze w MySQL

Załóżmy, że masz następującą tabelę sprzedaż (identyfikator, data_zamówienia, kwota) Kolumna i kwota zawiera łączne skumulowane dane sprzedaży.

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

Przeczytaj bonus:Jak porównać dwie kolumny w MySQL

W naszym przykładzie, jeśli chcesz sprawdzić sprzedaż dokonywaną każdego dnia, musisz porównać wartość kwoty w każdym wierszu z wartością w poprzednim wierszu. Oto zapytanie SQL do porównania każdego wiersza z poprzednim.

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

W powyższym zapytaniu łączymy tabelę sprzedaży ze sobą za pomocą warunku INNER JOIN g2.id=g1.id + 1, który pozwala porównać każdy wiersz z poprzednim wierszem.

Przeczytaj bonus:Jak uzyskać każdy N-ty wiersz w MySQL

Pamiętaj, że warunek ten zależy od tego, że nasza kolumna id ma kolejne liczby. Większość tabel ma kolumnę klucza podstawowego z automatycznym przyrostem, więc powinna działać w większości przypadków. Jeśli różnią się one inną stałą, możesz odpowiednio zmodyfikować warunek INNER JOIN.

Mamy nadzieję, że teraz możesz łatwo porównać dwa wiersze w tej samej tabeli w MySQL.

Ubiq ułatwia wizualizację danych i monitorowanie ich w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj Ubiq za darmo.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obliczanie mediany za pomocą dynamicznego kursora

  2. Praca nad pominiętymi optymalizacjami

  3. Odczytany poziom izolacji zatwierdzonej

  4. W jaki sposób analiza obciążenia SQL może Ci pomóc?

  5. Niespodzianki dotyczące wydajności i założenia:GROUP BY vs. DISTINCT