ayuda con select y group by

Iniciado por d91, 9 Noviembre 2015, 13:31 PM

0 Miembros y 1 Visitante están viendo este tema.

d91

hola a todos, estoy tratando seleccionar las ventas del dia en Oracle pero no me funciona si trato de mostrar la suma por cada vendedor en la clausula grupo by
Código (sql) [Seleccionar]

select T.nombreempleado from vendedor P JOIN cat_empleado T ON T.idempleado = P.empleado group by P.empleado

el problema esta al agregarle el group by y cuando quiero ver la suma por cada vendedor también me da problemas de esta forma
Código (sql) [Seleccionar]

select T.nombreempleado, sum(P.monto)total from vendedor P JOIN cat_empleado T ON T.idempleado = P.empleado group by P.empleado

y por ultimo necesitaría filtrar por fecha
Código (sql) [Seleccionar]

select T.nombreempleado sum(P.monto)total from vendedor P JOIN cat_empleado T ON T.idempleado = P.empleado where P.fecha = '09/11/2015' group by p.empleado

agradezco la orientancion que me puedan dar

0roch1

Esto debería de funcionar.

Código (sql) [Seleccionar]

SELECT T.nombreempleado, SUM(P.monto) AS total FROM vendedor AS P, cat_empleado AS T WHERE P.fecha='2015-11-09'
AND P.empleado=T.idempleado
GROUP BY P.empleado


Solo ten cuidado con el formato de la fecha, en mi consulta la estoy manejando como si fuera tipo DATE.


d91

sigue con el error not group by expression
solo me funciona con este:
Código (sql) [Seleccionar]

select empleado, sum(monto) as total from vendedor group by empleado;

aunque necesito mostrar el nombre del empleado

d91

al final lo logre hacer funcionar, la regla es que en el group by deben ir todas las columnas a mostrar excepto la columna que sumará valores
Código (sql) [Seleccionar]


select T.nombreempleado, sum(P.monto) as total
from vendedor P join cat_empleado T
on P.empleado = T.idempleado
where P.fecha = '09/11/2015'
group by T.nombreempleado order by total desc;

0roch1

Cita de: d91 en 10 Noviembre 2015, 02:55 AM
al final lo logre hacer funcionar, la regla es que en el group by deben ir todas las columnas a mostrar excepto la columna que sumará valores
Código (sql) [Seleccionar]


select T.nombreempleado, sum(P.monto) as total
from vendedor P join cat_empleado T
on P.empleado = T.idempleado
where P.fecha = '09/11/2015'
group by T.nombreempleado order by total desc;


Y si tienes dos empleados con diferente id (empleado) pero exactamente el mismo nombre?

d91

yo pienso que primera hara la intersección
Código (sql) [Seleccionar]

FROM vendedor P JOIN cat_empleado T

ON P.empleado = T.idempleado




0roch1

Código (sql) [Seleccionar]

SELECT * FROM cat_empleado;

+------------+-----------------+
| idempleado | nombreempleado  |
+------------+-----------------+
|          1 | Juan Perez      |
|          2 | Pilar Alcantara |
|          3 | Juan Perez      |
+------------+-----------------+


Código (sql) [Seleccionar]

SELECT * FROM vendedor;

+----------+-------+------------+
| empleado | monto | fecha      |
+----------+-------+------------+
|        1 |  12.5 | 2015-11-09 |
|        1 |  15.2 | 2015-11-09 |
|        1 |   2.3 | 2015-11-08 |
|        2 |   5.1 | 2015-11-07 |
|        2 |   4.9 | 2015-11-09 |
|        3 |     3 | 2015-11-09 |
|        3 |     3 | 2015-11-09 |
+----------+-------+------------+


La consulta que propongo.
Código (sql) [Seleccionar]

SELECT T.idempleado, T.nombreempleado, SUM(P.monto) AS total FROM vendedor AS P, cat_empleado AS T WHERE P.fecha='09/11/2015'
AND P.empleado=T.idempleado
GROUP BY T.idempleado;

+------------+-----------------+-------+
| idempleado | nombreempleado  | total |
+------------+-----------------+-------+
|          1 | Juan Perez      |  27.7 |
|          2 | Pilar Alcantara |   4.9 |
|          3 | Juan Perez      |     6 |
+------------+-----------------+-------+


La consulta que propones.
Código (sql) [Seleccionar]

SELECT T.nombreempleado, SUM(P.monto) AS total
FROM vendedor P JOIN cat_empleado T
ON P.empleado = T.idempleado
WHERE P.fecha = '09/11/2015'
GROUP BY T.nombreempleado ORDER BY total DESC;

+-----------------+-------+
| nombreempleado  | total |
+-----------------+-------+
| Juan Perez      |  33.7 |
| Pilar Alcantara |   4.9 |
+-----------------+-------+


Cita de: d91 en 10 Noviembre 2015, 02:32 AM
sigue con el error not group by expression

Qué SMBD usas?

d91


d91

bueno creo que la respuesta a la pregunta es: seleccionar el id de los empleados para que distinga por id
Código (sql) [Seleccionar]

select t.id,t.nombre, sum(p.monto) as total
from vendedor p join empleado t on p.empleado = t.id
where p.fecha = sysdate
group by t.id, t.nombre order by total desc;