Consultas con GROUP BY
By admin on Nov 3, 2008 | In Aprendiz | Send feedback »
¡Hola, no estoy hibernando todavía!¡He estado muy ocupado con el SqlServer en mi trabajo. Una cláusula útil que utilizo allí es "TOP" para limitar las filas que obtiene tu consulta. Por supuesto tenemos un equivalente en Mysql, es decir LIMIT. Esto es muy útil para establecer un orden en las filas de tu consulta; a proposito, además de restringir la pregunta a las primeras filas, puedes utilizar el OFFSET para saltar filas. Por ejemplo si quiero traer detrás 5 filas de la tabla EMP, pero no los 5 valores más bajos, podría utilizar la declaración siguiente
Code:
select sal from emp order by sal limit 5 offset 5; | |
+------+ | |
| sal | | |
+------+ | |
| 1250 | | |
| 1300 | | |
| 1500 | | |
| 1600 | | |
| 2450 | | |
+------+ | |
5 rows in set (0.01 sec) |
Ahora otro punto útil sobre la cláusula del LIMIT es se puede utilizarla en consultas de GROUP BY. Claro que tenga sentido, es que la cláusula del LIMIT está trabajando en las filas de registro que se vuelven para la exhibición. Puede ser que los conjuntos de datos grandes produzcan más filas que estás interesado adentro. Usando la cláusula de LIMIT restringirá el número de filas que buscas:
Code:
mysql> select deptno, sum(sal) from emp | |
-> group by deptno | |
-> order by sum(sal) desc | |
-> limit 2; | |
+--------+----------+ | |
| deptno | sum(sal) | | |
+--------+----------+ | |
| 20 | 10875 | | |
| 30 | 10650 | | |
+--------+----------+ | |
2 rows in set (0.00 sec) |
Pienso qué la combinación de GROUP BY con otras funciones y cláusulas, es lo que haga muy poderoso el sql en analizar bases de datos. El código siguiente demuestra esto, pues confía en el uso del operador de la UNION de exhibir diversos resúmenes en el mismo informe. (recuerde utilizar el mismo número de columnas y de mismo tipo de datos en la columna adentro a cada uno la declaración selecta):
Code:
mysql> select deptno, job, | |
-> 'TOTAL BY DEPT AND JOB' as category, | |
-> sum(sal) as sal | |
-> from emp | |
-> group by deptno, job | |
-> UNION ALL | |
-> select deptno, null, | |
-> 'TOTAL BY DEPT', sum(sal) | |
-> from emp | |
-> group by deptno | |
-> UNION ALL | |
-> select null, null, | |
-> 'GRAND TOTAL FOR TABLE', sum(sal) | |
-> from emp; | |
+--------+-----------+-----------------------+-------+ | |
| deptno | job | category | sal | | |
+--------+-----------+-----------------------+-------+ | |
| 10 | CLERK | TOTAL BY DEPT AND JOB | 1300 | | |
| 10 | MANAGER | TOTAL BY DEPT AND JOB | 2450 | | |
| 10 | PRESIDENT | TOTAL BY DEPT AND JOB | 5000 | | |
| 20 | ANALYST | TOTAL BY DEPT AND JOB | 6000 | | |
| 20 | CLERK | TOTAL BY DEPT AND JOB | 1900 | | |
| 20 | MANAGER | TOTAL BY DEPT AND JOB | 2975 | | |
| 30 | CLERK | TOTAL BY DEPT AND JOB | 950 | | |
| 30 | MANAGER | TOTAL BY DEPT AND JOB | 2850 | | |
| 30 | SALESMAN | TOTAL BY DEPT AND JOB | 6850 | | |
| 10 | NULL | TOTAL BY DEPT | 8750 | | |
| 20 | NULL | TOTAL BY DEPT | 10875 | | |
| 30 | NULL | TOTAL BY DEPT | 10650 | | |
| NULL | NULL | GRAND TOTAL FOR TABLE | 30275 | | |
+--------+-----------+-----------------------+-------+ | |
13 rows in set (0.54 sec) |
Mola mucho no? (je je !).
Antes de que me vaya, tengo que admitir a conseguir la mayor parte de a mis ejemplos del código este vez del libro SQL CookBook, publicado por O' Reilly. Puede encontrar el libro en este sitio Oreilly Puedo recomendar este libro totalmente.
Bueno, es la hora de irme pero espero que visites mi sitio otra vez pronto. Suerte con el trabajo. ¡Hasta la proxima!
Feedback awaiting moderation
This post has 8 feedbacks awaiting moderation...
Leave a comment
| « Comprobar que un campo contiene texto | Código hermoso » |