gpt4 book ai didi

sql - 正确使用 GROUP BY

转载 作者:行者123 更新时间:2023-11-29 13:17:41 25 4
gpt4 key购买 nike

我想说的是表 opportunities 中的实体是否加售。一家公司可以有多个机会 (1:N),当机会与一家公司有联系并且过去的某个其他机会已经成功完成业务(因此 status 为 7)时,追加销售为真同一家公司。换句话说,状态为 7 的第一个机会不是追加销售,同一公司的所有其他机会无论其状态如何都是追加销售。

这就是我尝试过的

SELECT opportunities.id ,true as upsell FROM opportunities, (
SELECT companies.id as company_id, opportunities.id as opportunity_id
FROM opportunities
JOIN companies ON companies.id = opportunities.company_id
WHERE opportunities.status = 7
GROUP BY companies.id, opportunities.id
HAVING min(opportunities.created_at) = opportunities.created_at)
AS subs WHERE subs.opportunity_id = opportunities.id

这里的想法是在子选择中选择所有第一个成功完成的机会(基于 created_at 列),然后从拥有同一公司的所有机会中删除它们。然而,即使 subselect 也不能​​正常工作,它会返回所有由 status = 7 过滤的机会,所以我可能误解了 group by 子句。 -

最佳答案

如果我没理解错的话,您希望 opportunities 在以下情况下被标记为 true:

  • 状态 = 7
  • 这不是公司的第一个记录

如果是这样,我认为这就简单多了:

select o.*,
(row_number() over (partition by o.company_id, o.status
order by created_at
) > 1 or
status <> 7
) as upsell_flag
from opportunities o;

关于sql - 正确使用 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46649209/

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