Código hermoso
By admin on Sep 21, 2008 | In Aprendiz, Trucos avanzado
¡Que me disculpen! - Un aplazamiento desde mi ultima entrada pasada. He comenzado un nuevo trabajo que utiliza SQLServer (¡que pena!), así que mi uso de Mysql ha sido muy pequeño últimamente.
Bueno, tomemos a un poco la mirada en la cláusula Group By. Una de las maneras mas comunes que lo utilizo es traer detrás los registros que se duplican más de una vez. Por ejemplo:
Code:
mysql> select ename, job, deptno,count(*) | |
from emp | |
group by ename, job, deptno | |
having count(*) > 1 | |
| |
; | |
+-------+----------+--------+----------+ | |
| ename | job | deptno | count(*) | | |
+-------+----------+--------+----------+ | |
| WARD | SALESMAN | 30 | 2 | | |
+-------+----------+--------+----------+ | |
1 row in set (0.00 sec) |
¿Ahora cómo obtendras (suprimir o actualización) el último parte insertado de este registro duplicado? En este caso hay 2 filas, uno con el empno de 7521, el último fila tiene el empno 8000. El código siguiente (en mi opinión humilde) es muy elegante, y es quizás mi pedacito preferido del sql que he visto...gracias a este libro . libro mysql
Code:
mysql> select * from emp | |
-> where empno not in (select min(empno) | |
-> from emp | |
-> group by ename, job, deptno); | |
| |
+-------+-------+----------+------+------------+------+------+--------+ | |
| empno | ename | job | mgr | hiredate | sal | comm | deptno | | |
+-------+-------+----------+------+------------+------+------+--------+ | |
| 8000 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 | | |
+-------+-------+----------+------+------------+------+------+--------+ | |
1 row in set (0.01 sec) |
Aquí está otra manera de usar la cláusula del Group By (otra vez usando subconsultas) para traer detrás a los empleados con el sueldo más alto y más bajo del grupo de datos.
Code:
mysql> select ename, job, deptno | |
-> from emp | |
-> where sal in ((select min(sal) from emp), | |
-> (select max(sal) from emp)); | |
| |
+-------+-----------+--------+ | |
| ename | job | deptno | | |
+-------+-----------+--------+ | |
| SMITH | CLERK | 20 | | |
| KING | PRESIDENT | 10 | | |
+-------+-----------+--------+ | |
2 rows in set (0.10 sec) |
Ahora que, a mí está también el código hermoso. ¡Disfruta de tu codificación - hasta la próxima!
Feedback awaiting moderation
This post has 15 feedbacks awaiting moderation...
Leave a comment
| « Consultas con GROUP BY | Poner Innodb en marcha » |