gpt4 book ai didi

mysql - 从 3 个表中选择具有连接的数据

转载 作者:行者123 更新时间:2023-11-30 21:33:39 25 4
gpt4 key购买 nike

我现在刚开始学习 SQL 并试图弄清楚这种情况:

我们有 3 个表:

Clients (ClientID, Name, Surname, Age)
Products (ProductID, Name, Price)
Purchases (PurchaseID, Date, ClientID, ProductID)

显示客户购买金额(每个客户的总金额)的最佳 SQL 查询是什么?

它必须只显示购买超过 1 次的客户。

结果应包含以下字段:全名、购买数量、总金额。

我有这个查询,但它只连接了两个表。我如何加入第三个表 (Products.Price) 并计算每个客户的总金额?

SELECT  CONCAT(IFNULL(Name,''),' ', IFNULL(Surname,'')) as FullName,
COUNT(purchaseId) as "Quantity of purchases"
FROM Purchases as P
INNER JOIN Clients as C
on P.ClientID = C.ClientID
GROUP BY C.ClientID,Name, Surname
HAVING COUNT(PurchaseId) > 1;

最佳答案

我建议您使用 CONCAT_WS() 来组合名字。这比您的解决方案更优雅地处理 NULL 值。

SELECT CONCAT_WS(c.Name, c.Surname) as FullName,
COUNT(*) as num_purchases,
SUM(pr.price) as total_price
FROM Clients c INNER JOIN
Purchases p
ON P.ClientID = C.ClientID INNER JOIN
Products pr
ON pr.ProductID = p.ProductID
GROUP BY CONCAT_WS(c.Name, c.Surname)
HAVING COUNT(DISTINCT p.PurchaseId) > 1;

注意 HAVING 子句中的 COUNT(DISTINCT)。这可确保客户至少有两次购买。如果您只希望客户拥有至少两种产品或购买,那么您可以使用 COUNT(*) -- 但您的问题是关于购买的。

关于mysql - 从 3 个表中选择具有连接的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com