PHP - Consulta sql para obtener el cliente que ha realizado el mayor número de pedidos

 
Vista:
sin imagen de perfil
Val: 27
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Consulta sql para obtener el cliente que ha realizado el mayor número de pedidos

Publicado por robiok (6 intervenciones) el 20/01/2021 20:44:18
La consulta a obtener es la siguiente:

Obtener el cliente que ha realizado el mayor número de pedidos. Listar codcliente y número pedidos.



Mis tablas son las siguientes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
CREATE TABLE Cliente
( cod_cliente INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
  nombre CHAR(20) NOT NULL,
  direccion VARCHAR(150) NOT NULL,
  email VARCHAR(60) NOT NULL UNIQUE,
  fechaalta date DEFAULT NOW(),
  telefono VARCHAR(9) NOT NULL,
  ciudad VARCHAR(10) NOT NULL,
  CP VARCHAR(6) NOT NULL,
  Observaciones VARCHAR(200)
);
 
CREATE TABLE articulos
( codart INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
  descripcion VARCHAR(100) NOT NULL,
  precio DECIMAL(4,2) NOT NULL,
  stock INT NOT NULL,
 CHECK (stock>=0)
);
 
 
CREATE TABLE pedido
( id_pedido INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
  cod_cliente INT NOT NULL,
  fechapedido DATE NOT NULL,
  entregado ENUM('S', 'N') DEFAULT 'N' NOT NULL,
  FOREIGN KEY(cod_cliente) REFERENCES cliente(cod_cliente) ON DELETE CASCADE
);
 
 
 
CREATE TABLE LineasPedido
( id_pedido INT NOT NULL,
  num_linea INT NOT NULL,
  codart INT NOT NULL,
  unidades INT NOT NULL,
  PRIMARY KEY(id_pedido, num_linea),
  FOREIGN KEY(id_pedido) REFERENCES pedido(id_pedido) ON DELETE CASCADE,
  FOREIGN KEY(codart) REFERENCES articulos(codart) ON DELETE CASCADE
);


He intentado hacer la consulta de esta manera, pero no me sale bien y me da error:

1
2
3
4
SELECT cliente.nombre, MAX(SUM(lineaspedido.unidades)) "Pedidos"
FROM cliente, pedido, lineaspedido
WHERE cliente.cod_cliente = pedido.cod_cliente AND pedido.id_pedido = lineaspedido.id_pedido
GROUP BY cliente.nombre;
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

Consulta sql para obtener el cliente que ha realizado el mayor número de pedidos

Publicado por anonymous (53 intervenciones) el 20/01/2021 21:24:33
1
2
3
4
5
6
SELECT T1.nombre, MAX(Cantidad) AS Cantidad
FROM(
SELECT CLI.nombre, PED.cod_cliente, COUNT(*) AS Cantidad
FROM pedido PED
INNER JOIN cliente CLI ON CLI.cod_cliente = PED.cod_cliente) T1
GROUP BY T1.cod_cliente

No es posible hacer un Max(Sum). Tienes que hacerlo en dos partes primero sumas en un query interno y desde un externo sacas el máximo de esa suma.

Pero lo que pretendes hacer de: MAX(SUM(lineaspedido.unidades)) jamás te funcionará en ningún motor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Consulta sql para obtener el cliente que ha realizado el mayor número de pedidos

Publicado por Mauro (1047 intervenciones) el 21/01/2021 14:44:07
Prueba con:

1
2
3
4
SELECT cliente.nombre, SUM(lineaspedido.unidades) "Pedidos"
FROM cliente, pedido, lineaspedido
WHERE cliente.cod_cliente = pedido.cod_cliente AND pedido.id_pedido = lineaspedido.id_pedido
GROUP BY cliente.nombre, ORDER By SUM(lineaspedido.unidades) DESC LIMIT 1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar