【发布时间】:2018-03-22 21:23:05
【问题描述】:
有问题的表是Purchases (pid, cid, pdate, eid),其中pid 是主键,因此代表个人购买。 cid 代表购买的客户。我必须得到所有购买超过 5 次的客户,并给他们一张免费票(为 cid 创建一个新条目)。最好的方法是什么?
【问题讨论】:
-
祝你作业顺利......该死的学校!
有问题的表是Purchases (pid, cid, pdate, eid),其中pid 是主键,因此代表个人购买。 cid 代表购买的客户。我必须得到所有购买超过 5 次的客户,并给他们一张免费票(为 cid 创建一个新条目)。最好的方法是什么?
【问题讨论】:
对表进行内部联接(如果您需要客户的姓名)并按 CID 分组 有计数(CID)> 5
【讨论】:
在编写复杂的 SQL 查询时,最好的方法之一是迭代开发...从小处着手,然后从那里开始。
例如,获取至少购买过一次的每位客户的购买计数:
SELECT p.cid
, COUNT(1) AS cnt_purchases
FROM purchase p
GROUP BY p.cid
ORDER BY p.cid
注意GROUP BY 子句和聚合COUNT 函数的用法。
如果我们想要相同的结果,但想要排除只购买过一次的客户怎么办?我们可以在 HAVING 子句中包含聚合函数结果的条件。
例如:
SELECT p.cid
, COUNT(1) AS cnt_purchases
FROM purchase p
GROUP BY p.cid
HAVING COUNT(1) > 1
ORDER BY p.cid
应该很容易看出我们如何排除购买少于五次的客户。
这些是我们在尝试解决更复杂的问题之前需要了解的模式。
(该问题不包括任何 SQL,并且没有表明对如何使用GROUP BY 或聚合函数获取“计数”有任何了解。)
【讨论】: