【问题标题】:Compare CustomerID from two tables and determine who made the most purchases比较两个表中的 CustomerID 并确定谁购买的次数最多
【发布时间】:2022-01-19 16:58:25
【问题描述】:

我是 SQL 新手,来自 Python,很难理解 SQL 语法。我有一个名为“Purchases”的表,还有一个位于第一个表下方的名为“Customers”的表。

我想SELECT 购买最多 次的客户的姓氏(可以计入PurchaseID)。我已经弄清楚如何按姓氏汇总购买计数,但我不知道如何返回具有大多数 购买的单个客户LastName。最后,我不确定我是否以最直观的方式执行此操作?我很高兴收到反馈。

PurchaseID CustomerID
1 1
2 2
3 3
4 4
5 5
6 5
7 5
8 4
9 3
10 2
LastName CustomerID
Davis 1
Smith 2
Tran 3
Washington 4
Lopez 5
SELECT t2.LastName, COUNT(t1.CustomerID) AS purchase_count
FROM Purchases t1
LEFT JOIN Customers t2 ON 
t1.CustomerID = t2.CustomerID
GROUP BY t2.LastName

返回

LastName purchase_count
Davis 1
Smith 2
Lopez 3
Tran 2
Washington 2

【问题讨论】:

  • 如果不止一个人共享相同的计数,您期望什么?
  • ORDER BY purchase_count DESC LIMIT 1(并解决当用户购买最多时该怎么办)。
  • 如果有两个客户三单怎么办?
  • 谢谢,抱歉,我没明白您的意思 - 只有 CustomerID 5 有 3 次购买?
  • 如果 Tran 也有 3 次购买怎么办?谁应该出现在结果中?

标签: mysql sql


【解决方案1】:

如前所述,一种解决方案是在查询末尾使用ORDER BY purchase_count DESC LIMIT 1。但是,即使有更多购买次数最多的客户,它也只会返回一位客户。

如果您想退回购买次数最多的所有客户,请使用以下查询。

SELECT t2.LastName, COUNT(t1.CustomerID) AS purchase_count
FROM Purchases t1
LEFT JOIN Customers t2 
  ON t1.CustomerID = t2.CustomerID
GROUP BY t2.LastName
HAVING COUNT(t1.CustomerID) >= all(
    SELECT COUNT(t1.CustomerID) AS purchase_count
    FROM Purchases t1
    GROUP BY t1.CustomerID
)

【讨论】:

  • 谢谢!我将阅读有关HAVINGall 的内容,以便更清楚地理解这一点
  • @seh33 不客气 :)
猜你喜欢
  • 2019-04-16
  • 2015-03-10
  • 1970-01-01
  • 2015-10-25
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
相关资源
最近更新 更多