MySQL - Consulta de máximos sql

 
Vista:
sin imagen de perfil

Consulta de máximos sql

Publicado por Catalina (1 intervención) el 10/02/2018 00:25:48
Hola tengo un problema, es que quiero mostrar cual es la factura (Codigo Factura, fecha de factura, persona(nombres y apellidos) ), con la mayor cantidad de artículos vendidos. Tengo tres tablas una persona con sus datos otra factura con codigofac , fechafac y persona , y una de detallefactura que tiene codigofac cantidad producto

tengo esto

select distinct detallefactura.CodigoFactura, factura.fechafactura, persona.nombre||persona.apellido NOMBRES
from detallefactura, factura , persona
order by (max (cantidad));

pero al ejecutarlo me sale error ("not a single-group group function") y es porque en la tabla detallefac el codigofac se repite y da la casualidad que los que tienen codigo repetido son los de la mayor cantidad de articulos vendidos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Consulta de máximos sql

Publicado por Leonardo Josué (414 intervenciones) el 15/02/2018 15:27:17
Hola Catalina:

El error que te genera es debido que en el ORDER BY estás utilizando la función de agrupación MAX, pero en realidad no estás agrupando tus datos de ninguna manera:

Además de ese error, tienes otros bastante más graves:

1. En el FROM estás listando tus tres tablas, sin embargo NO ESTÁS PONIENDO EN EL WHERE LA FORMA EN QUE ESTÁN RELACIONADAS ESTAS TABLA, por lo tanto se está haciendo un producto cartesiano entre ellas, lo cual es terrible. Si no sabes a qué me refiero imagina que tienes estas dos tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT * FROM tabla1;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | uno         |
|    2 | dos         |
|    3 | tres        |
+------+-------------+
3 rows in set (0.00 sec)
 
mysql> SELECT * FROM tabla2;
+------+-------------+
| id   | descripcion |
+------+-------------+
|    1 | one         |
|    2 | two         |
|    3 | three       |
+------+-------------+
3 rows in set (0.00 sec)

Tal como estás haciendo las cosas, tienes esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT * FROM tabla1, tabla2;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    1 | one         |
|    3 | tres        |    1 | one         |
|    1 | uno         |    2 | two         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    2 | two         |
|    1 | uno         |    3 | three       |
|    2 | dos         |    3 | three       |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
9 rows in set (0.00 sec)

es decir, cada registro de la tabla1 se relaciona con un registro de la tabla2 PORQUE NO SE ESPECIFICA CÓMO ESTÁN RELACIONADAS. ¿qué tienes que hacer? pues agregar una condición WHERE donde indices qué campos son los relacionados:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT *
    -> FROM tabla1, tabla2
    -> WHERE tabla1.id = tabla2.id;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
3 rows in set (0.00 sec)

o mejor aun, utiliza JOINS en lugar de poner tu tablas en el FROM, así:

1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT *
    -> FROM tabla1
    -> INNER JOIN tabla2 ON tabla1.id = tabla2.id;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | one         |
|    2 | dos         |    2 | two         |
|    3 | tres        |    3 | three       |
+------+-------------+------+-------------+
3 rows in set (0.00 sec)

2. No nos dices cómo es la estructura de tus tablas ni nos pones datos de ejemplo, entonces es muy difícil para nosotros tratar de jugarle al adivino. ¿en qué tabla tienes la cantidad de artículos vendidos? ¿cómo están relacionadas tus tablas, es decir, cuales campos son llaves primaras y cuales llaves foráneas?

3. pregúntale a SAN GOOGLE cómo trabajan las funciones de agrupación en SQL, estoy seguro de que encontraras varios ejemplos que te ayuden a entenderlos.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar