Flashdiner
Flashdiner

Reputation: 13

Group by count multiple tables

Need to find out why my group by count query is not working. I am using Microsoft SQL Server and there are 2 tables I am trying to join.

My query needs to bring up the number of transactions made for each type of vehicle. The output of the query needs to have a separate row for each type of vehicle such as ute, hatch, sedan, etc.

CREATE TABLE vehicle
(
     vid   INT PRIMARY KEY,
     type  VARCHAR(30) NOT NULL,
     year  SMALLINT NOT NULL,
     price DECIMAL(10, 2) NOT NULL,
);

INSERT INTO vehicle
VALUES (1, 'Sedan', 2020, 240)

CREATE TABLE purchase
(
     pid        INT PRIMARY KEY,
     vid        INT REFERENCES vehicle(vid),
     pdate      DATE NOT NULL,
     datepickup DATE NOT NULL,
     datereturn DATE NOT NULL,
);

INSERT INTO purchase
VALUES (1, 1, '2020-07-12', '2020-08-21', '2020-08-23') 

I have about 10 rows on information in each table I just haven't written it out.

This is what I wrote but it doesn't return the correct number of transactions for each type of car.

SELECT 
    vehicle.vid,
    COUNT(purchase.pid) AS NumberOfTransactions
FROM   
    purchase
JOIN 
    vehicle ON vehicle.vid = purchase.pid
GROUP BY 
    vehicle.type; 

Any help would be appreciated. Thanks.

Upvotes: 1

Views: 88

Answers (1)

Gordon Linoff
Gordon Linoff

Reputation: 1271241

Your GROUP BY and SELECT columns are inconsistent. You should write the query like this:

SELECT v.Type, COUNT(*) AS NumPurchases
FROM Purchase p JOIN
     Vehicle v
     ON v.vID = p.pID
GROUP BY v.Type;

Note the use of table aliases so the query is easier to write and read.

If this doesn't produce the expected values, you will need to provide sample data and desired results to make it clear what the data really looks like and what you expect.

Upvotes: 1

Related Questions