基于单个列值的循环和插入 SQL

Posted

技术标签:

【中文标题】基于单个列值的循环和插入 SQL【英文标题】:Looping and inserting based on individual column values SQL 【发布时间】:2018-03-22 21:23:05 【问题描述】:

有问题的表是Purchases (pid, cid, pdate, eid),其中pid 是主键,因此代表个人购买。 cid 代表购买的客户。我必须得到所有购买超过 5 次的客户,并给他们一张免费票(为 cid 创建一个新条目)。最好的方法是什么?

【问题讨论】:

祝你作业顺利......该死的学校! 【参考方案1】:

对表进行内部联接(如果您需要客户的姓名)并按 CID 分组 有计数(CID)> 5

【讨论】:

【参考方案2】:

在编写复杂的 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 或聚合函数获取“计数”有任何了解。)

【讨论】:

以上是关于基于单个列值的循环和插入 SQL的主要内容,如果未能解决你的问题,请参考以下文章

基于 SQL Server 2008 中列值的内部联接

基于列值的 Foreach 内部的 Foreach

有没有一种有效的方法来计算 Pandas 中的列值,使用基于其他列的条件值的前行的值?

基于列值的条件连接

PySpark Dataframe 将两列转换为基于第三列值的元组新列

一个基于列值的新列中对应列的添加值