none
Hacer un Inner Join en una consulta con un COUNT? RRS feed

  • Pregunta

  • Tengo una tabla de Alquileres, en la cual el ID de los clientes esta incluido en cada registro. Tambien tengo una tabla de Clientes, la cual tiene el ID de cliente mas el nombre y el apellido.

    Ahora mismo tengo una consulta que basicamente me cuenta cuantas veces cada cliente realizo alquieres:

              Select IdCliente, count(1) as CantidadAlquileres from Alquileres
              Group by IdCliente

    Bueno, el resultado seria algo similar a esto:

    ID CLIENTE   |  CantidadAlquieres

           0           |             3

           1           |             2

    Lo que quiero hacer es un Inner Join con la tabla de clientes para poder traer el Nombre y el Apellido del Cliente, asi se sabe a quien le pertenece cada ID.

    El resultado que busco es algo como esto:

    ID CLIENTE   |        Nombre    |   Apellido    | CantidadAlquieres

           0           |        Carlos      |   Sanchez    |             3

           1           |        Francisco  |  Marquez    |             2

    Ya intente realizar la siguiente consulta:

         Select Alquileres.IdCliente, count(1) as CantidadAlquileres, Clientes.Nombre, Clientes.Apellido from Alquileres
         Inner join Clientes on (Alquileres.IdCliente = Clientes.IdCliente) 

         Group by Alquileres.IdCliente

    Pero no funciona, así que esto es basicamente un error de sintaxis, alguien me podria ayudar con este problema?


    martes, 17 de julio de 2018 23:52

Todas las respuestas

  • Hola FranciscoFJM:

    La consulta esta bien planteada, pero tienes que agrupar por todos las columnas que no tienen una función de agrupación.

    CREATE TABLE Alquileres
    (id        INT IDENTITY(1, 1),
     idCliente INT,
     importe   FLOAT
    );
    GO
    INSERT INTO Alquileres
    (idCliente,
     importe
    )
    VALUES
    (0, 125),
    (0, 123.5),
    (0, 156.2),
    (1, 1000),
    (1, 1456.2);
    GO
    CREATE TABLE Clientes
    (idCliente INT,
     nombre    VARCHAR(100),
     apellido  VARCHAR(100)
    );
    GO
    INSERT INTO Clientes
    (idCliente,
     nombre,
     apellido
    )
    VALUES
    (0, 'Ana', 'González'),
    (1, 'Pedro', 'Rodriguez'),
    (2, 'Isabel', 'Jiménez');
    GO
    /*Fin de planteamiento */
    
    SELECT a.idCliente,
           COUNT(*) AS cantidad,
           c.nombre,
           c.apellido
    FROM Alquileres a
         INNER JOIN Clientes c ON a.idCliente = c.idCliente
    GROUP BY a.idCliente,
             c.nombre,
             c.apellido;

    Un saludo

    miércoles, 18 de julio de 2018 7:27