【问题标题】:Including a Group By statement in a SQL Select subquery在 SQL Select 子查询中包含 Group By 语句
【发布时间】:2021-03-07 23:36:51
【问题描述】:

所以,我有一个这样结构的 SQL 表:

Product Date Client

只有两个客户(客户 A 和客户 B)在特定日期购买了产品。我需要输出一个表格,指定在满足有关时间的给定条件时每个客户购买每种产品的次数,并且输出需要这个特定的布局:

Product Times bought by Client A Times bought by Client B

在输出中,每个唯一产品仅出现一次(即按产品分组)。

我开始尝试:

SELECT Product,

(SELECT COUNT(*) FROM table WHERE Client = "A" AND DATE (insert a complex condition here) AS "Times bought by Client A"

(那么B也一样)

FROM table

GROUP BY Product

但是使用该语法,输出显然将所有产品中客户端 A 的所有计数相加,然后在应用主查询中的 group by 时为每个产品返回它。所以每个单品的总数量都是一样的,对应着A买的任何一个kinf的总产品数。

所以我尝试在每个子查询中包含 Group By 语句(客户端 A 的时间,客户端 B 的时间),但随后出现错误“子查询返回超过 1 行”。

我应该如何为受 Group By Product 影响的每个客户创建一个字段??

【问题讨论】:

  • 我删除了不一致的数据库标签。请仅使用您真正使用的数据库进行标记。

标签: sql select subquery


【解决方案1】:

我想你想要条件聚合:

SELECT Product,
       SUM(CASE WHEN Client = 'A' THEN 1 ELSE 0 END) as Client_A,
       SUM(CASE WHEN Client = 'B' THEN 1 ELSE 0 END) as Client_B
FROM table
WHERE (insert a complex condition here) 
GROUP BY Product

【讨论】:

  • 谢谢,我想这正是我想要的。我可以使用这个线程来询问与同一查询相关的问题吗?我关于日期的“复杂条件”是我只需要计算给定一天时间(从 8 到 17)内的购买情况,我解决了这个问题:WHERE CAST(Date AS TIME) BETWEEN "08:00" AND "16: 59",但我每天只需要计算一次有效购买。所以我想我需要按 CAST Date AS Date 分组。在不更改输出布局的情况下,如何在您的解决方案中实现它?
  • @oddclot 。 . .您评论中的问题应该是一个单独的问题。您在此处提出的问题已得到解答。老实说,我并不完全支持评论中的问题,因此样本数据、期望的结果和清晰的解释都会有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
相关资源
最近更新 更多