sql >> Base de Datos >  >> RDS >> Database

Cómo comparar dos filas de la misma tabla

A veces, es posible que deba comparar filas sucesivas o comparar cada fila con la fila anterior en la tabla MySQL. En este artículo, veremos cómo comparar dos filas de la misma tabla mediante autocombinaciones. Puede usarlo para comparar filas consecutivas u obtener la diferencia entre dos filas.


Cómo comparar filas sucesivas en MySQL

Supongamos que tiene la siguiente tabla ventas (id, order_date, cantidad) y la columna de cantidad contiene datos de ventas acumuladas totales.

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

Lectura adicional:Cómo comparar dos columnas en MySQL

En nuestro ejemplo, si desea conocer las ventas realizadas cada día, debe comparar el valor del monto de cada fila con el de la fila anterior. Aquí está la consulta SQL para comparar cada fila con la fila 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 |
+------+------------+--------+--------------+

En la consulta anterior, unimos la tabla de ventas consigo misma mediante una condición INNER JOIN g2.id=g1.id + 1 que le permite comparar cada fila con su fila anterior.

Lectura adicional:Cómo obtener cada enésima fila en MySQL

Tenga en cuenta que esta condición depende del hecho de que nuestra columna de identificación tenga números consecutivos. La mayoría de las tablas tienen una columna de clave principal de incremento automático, por lo que debería funcionar en la mayoría de los casos. Si difieren en alguna otra constante, puede modificar la condición INNER JOIN en consecuencia.

Con suerte, ahora puede comparar fácilmente dos filas en la misma tabla en MySQL.

Ubiq facilita la visualización de datos y la supervisión en paneles en tiempo real. Prueba Ubiq gratis.