将多个表链接在一起时如何修复 count()

How to fix count() when linking multiple tables together

我删除了一个我称为 B_Price_per_hour 的属性,因为它本来应该是派生出来的,但它弄乱了我的一个代码,所以我不得不重新创建它,但我不太明白对。

SELECT c.Customer_ID, SUM(hours_of_use * C_price_per_hour) AS Total_Sales, COUNT(b.Booking_ID) AS Total_Visits
FROM CafeCustomers c, Booking b, Computer AS cc, BookingToComputer AS bc
WHERE c.Customer_ID = b.Customer_ID AND b.Booking_ID = bc.Booking_ID AND cc.Computer_ID = bc.Computer_ID 
GROUP BY c.Customer_ID
ORDER BY SUM(hours_of_use * C_Price_per_hour) DESC;


SELECT c.Customer_ID, SUM(hours_of_use * B_Price_per_hour) AS Total_Sales, COUNT(Booking_ID) AS Total_Visits
FROM CafeCustomers c, Booking b
WHERE c.Customer_ID = b.Customer_ID
GROUP BY c.Customer_ID
ORDER BY SUM(hours_of_use * B_Price_per_hour) DESC;

包含 BookingToComputer 和 Computer 的查询显示 count() 函数的结果不正确。

第一次查询结果: https://imgur.com/aMYHKUG

第二个(期望的结果)查询的结果: https://imgur.com/KfaGAge

也创建了这个,但仍然有同样的问题:

SELECT cc.Customer_ID, SUM(hours_of_use * C_price_per_hour) AS Total_Sales, COUNT(b.Booking_ID) AS Total_Visits
FROM CafeCustomers AS cc
INNER JOIN Booking AS b ON b.Customer_ID = cc.Customer_ID 
INNER JOIN BookingToComputer AS bc ON bc.Booking_ID = b.Booking_ID 
INNER JOIN Computer AS c ON c.Computer_ID = bc.Computer_ID 
GROUP BY cc.Customer_ID;

Table 信息:

CREATE TABLE [dbo].[Booking](
    [Booking_ID] [int] NOT NULL,
    [B_price_per_hour] [int] NOT NULL, (Removing this one)
    [Customer_ID] [int] NOT NULL, )


CREATE TABLE [dbo].[BookingToComputer](
    [Booking_ID] [int] NOT NULL,
    [Computer_ID] [int] NOT NULL, )


CREATE TABLE [dbo].[CafeCustomers](
    [Customer_ID] [int] NOT NULL,)



CREATE TABLE [dbo].[Computer](
    [Computer_ID] [int] NOT NULL,
    [C_price_per_hour] [int] NOT NULL,)

INSERT INTO Booking VALUES (1, 14, 1)
INSERT INTO Booking VALUES (2, 5, 1)
INSERT INTO Booking VALUES (3, 12, 2)
INSERT INTO Booking VALUES (4,7,3)
INSERT INTO Booking VALUES (5, 12, 2)
INSERT INTO Booking VALUES (6, 7, 5)
INSERT INTO Computer VALUES (1, 7)
INSERT INTO Computer VALUES (2, 7)
INSERT INTO Computer VALUES (3, 7)
INSERT INTO Computer VALUES (4, 7)
INSERT INTO Computer VALUES (5, 7)
INSERT INTO Computer VALUES (6, 7)
INSERT INTO Computer VALUES (7, 5)
INSERT INTO Computer VALUES (8, 5)
INSERT INTO BookingToComputer VALUES (1,1)
INSERT INTO BookingToComputer VALUES (1,2)
INSERT INTO BookingToComputer VALUES (2,5)
INSERT INTO BookingToComputer VALUES (3,3)
INSERT INTO BookingToComputer VALUES (3,8)
INSERT INTO BookingToComputer VALUES (4,7)
INSERT INTO BookingToComputer VALUES (5,6)
INSERT INTO BookingToComputer VALUES (6,4)
INSERT INTO CafeCustomers VALUES (1)
INSERT INTO CafeCustomers VALUES (2)
INSERT INTO CafeCustomers VALUES (3)
INSERT INTO CafeCustomers VALUES (4)
INSERT INTO CafeCustomers VALUES (5)

一直在玩,发现我必须将 DISTINCT 添加到计数中