Consulta sobre sql

Que tal, quisiera hacer una consulta sobre sql.
Hice una consulta que me calculaba la plata que debía cierta persona que tenia varios remitios asignado, hasta hay bárbaro, use sum() y me dio lo que debía cada persona, lo que no se como hacer es ordenar de mayor a menor de acuerdo a lo que me dio la función sum()
Espero que me entienda
Saludos
Espero su respuesta
Martin

2 Respuestas

Respuesta
1
Tienes que poner en el order by lo mismo que tienes como definición de la columna. Te pongo un ejemplo:
SELECT idEstado, SUM(iKilometros) AS importes
FROM Comisiones
GROUP BY idEstado
ORDER BY SUM(iKilometros) desc
Dcanete: muchas gracias por contestarme
El ejemplo que tu me das es parecido a lo que yo he hecho.
El order by sum(ikilometros) desc lo he probado pero me marca un error y no me deja hacerlo me dice mas o menos que es un error de sintaxis.
lo que yo hago es lo siguiente
SELECT sum(lremiten.precio),lectores.nombre,lectores.apellido
FROM lectores,lremiten,lremitos
WHERE lremitos.nrosocio = lectores.nrosocio
and lremitos.nroremito = lremiten.nroremito
GROUP BY lectores.nrosocio
donde lremiten,lectores y lremitos son las tablas que relaciono.
Me da lo que quiero pero lo quiero ordenado de mayor a menor de acuerdo a la suma
Yo uso el dbtools para hacer las consultas, ahora copio el error que me sale y se lo envío .
Muchas gracias por ayudarme, espero tu respuesta
Saludos
martin
El ejemplo que te mandé, esta hecho sobre una base de datos real y me funciona.
A lo mejor el problema es el join que haces al estilo Oracle. Mira a ver si te funciona con el T-SQL en vez de SQL Estadar. Te pongo tu consulta en T-SQL:
SELECT sum(lremiten.precio),lectores.nombre,lectores.apellido
FROM lectores
inner join lremitos in lremitos.nrosocio = lectores.nrosocio
inner join lremiten in lremitos.nroremito = lremiten.nroremito
GROUP BY lectores.nrosocio
order by sum(lremiten.precio)
Probé lo que me dijiste y el mensaje que me salio luego de insertar el order by sum(lremite. Precio)
Fue
"invalid use of group function"
Espero que me puedas ayudar como solucionar el problema
Saludos
martin
Creo que el problema es que los campos que se presentan deben estar siempre en el group by o con una función de agregado (SUM, COUNT, etc), o sea, debes poner GROUP BY lectores. Nrosocio, lectores. Nombre, lectores. Apellido.
dcanete:
Ya solucione el problema que me estaba volviendo loco.
Lo que hice fue lo siguiente
SELECT lectores.nombre,lectores.apellido,sum(lremiten.precio) AS total
FROM lectores,lremiten,lremitos
WHERE lremitos.nrosocio = lectores.nrosocio
and lremitos.nroremito = lremiten.nroremito
GROUP BY lectores.nrosocio
ORDER BY total DESC
A sum(lremiten. Precio)lo llame total y luego ordene de mayor a menor total.
Igualmente, dcanete, me sirvió mucho lo que me aconsejaste ya que me sirvió para empezar a investigar y probar
Saludos
Gracias
martin
Me alegro de que te sirviera. Si no tienes más dudas, vota y cierra la pregunta para que otros puedan verla si tienen una duda parecida.
No dudes en preguntar en otra ocasión.
Dani, muchas gracias por ayudarme a solucionar el problema, la respuesta me fue muy útil para mi y seguro que no voy a dudar en consultarte de nuevo
Respuesta
1
Ordenar SELECT SQL en Agregados:
Los agregados son los resultados de un SELECT con GROUP BY.
En estos casos, ordenar los resultados en complejo, ya que en una sola sentencia es imposible, aunque usemos el comando ORDER BY.
Esto es así, porque "ORDER BY" actúa sobre los registros obtenidos en primera instancia por el SELECT, pero no sobre los obtenidos al actuar el comando "GROUP BY".
De modo que la única solución es crear una tabla temporal, a base de los resultados del SELECT SUM() ... GROUP BY ...
Sobre esa tabla temporal, luego, puedes efectuar un SELECT ... ORDER BY, obteniendo así el resultado deseado.
¿Qué tal, crear una tabla temporal significaría modificar la base de datos, la duda es como cargo en el campo de la nueva tabla la suma de lo que debe?
Me puede ayudar un poco en ese tema
Muchas gracias
Saludos
martin
Creación de tabla temporal en MySQL:
CREATE TEMPORARY TABLE suma TYPE=HEAP;
INSERT INTO suma SELECT SUM(campoelquesea) AS total FROM tablalaquesea WHERE condicionlaquesea GROUP BY campodeagrupacion;
SELECT * FROM suma ORDER BY total DESC;
DROP TABLE suma;
consulta sobre sql (17/9/2002)
Que tal, quisiera hacer una consulta sobre sql.
Hice una consulta que me calculaba la plata que debía cierta persona que tenia varios remitios asignado, hasta hay bárbaro, use sum() y me dio lo que debía cada persona, lo que no se como hacer es ordenar de mayor a menor de acuerdo a lo que me dio la función sum()
Espero que me entienda
Saludos
Espero su respuesta
Martin
Ordenar SELECT SQL en Agregados (20/9/2002)
Ordenar SELECT SQL en Agregados:
Los agregados son los resultados de un SELECT con GROUP BY.
En estos casos, ordenar los resultados en complejo, ya que en una sola sentencia es imposible, aunque usemos el comando ORDER BY.
Esto es así, porque "ORDER BY" actúa sobre los registros obtenidos en primera instancia por el SELECT, pero no sobre los obtenidos al actuar el comando "GROUP BY".
De modo que la única solución es crear una tabla temporal, a base de los resultados del SELECT SUM() ... GROUP BY ...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas