Database
 sql >> Base de Dados >  >> RDS >> Database

Como comparar duas linhas da mesma tabela


Às vezes, você pode precisar comparar linhas sucessivas ou comparar cada linha com a linha anterior na tabela MySQL. Neste artigo, veremos como comparar duas linhas da mesma tabela usando autojunções. Você pode usá-lo para comparar linhas consecutivas ou obter a diferença entre duas linhas.



Como comparar linhas sucessivas no MySQL


Digamos que você tenha a seguinte tabela vendas (id, order_date, valor) e montante contém dados de vendas cumulativas totais.
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 |
+------+------------+--------+

Bônus de leitura:Como comparar duas colunas no MySQL

Em nosso exemplo, se você quiser descobrir as vendas feitas em cada dia, precisará comparar o valor do valor de cada linha com o da linha anterior. Aqui está a consulta SQL para comparar cada linha com a linha anterior.
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 |
+------+------------+--------+--------------+

Na consulta acima, juntamos a tabela de vendas com ela mesma usando uma condição INNER JOIN g2.id=g1.id + 1 que permite comparar cada linha com sua linha anterior.

Bônus de leitura:Como obter cada enésima linha no MySQL

Observe que essa condição depende do fato de nossa coluna id ter números consecutivos. A maioria das tabelas tem uma coluna de chave primária de incremento automático, portanto, deve funcionar na maioria dos casos. Se eles diferirem por alguma outra constante, você pode modificar a condição INNER JOIN de acordo.

Espero que agora você possa comparar facilmente duas linhas na mesma tabela no MySQL.

O Ubiq facilita a visualização de dados e o monitoramento em painéis em tempo real. Experimente o Ubiq gratuitamente.