【发布时间】:2017-02-15 23:40:18
【问题描述】:
我有两张桌子。一个是带有列的客户表:cid、name、state。 另一个表是 Purchase 表,列有:pid、cid、booktitle、price。
客户:
CID NAME STATE
1 Peng NY
2 Li IL
3 Chan NY
购买:
PID CID BOOKTITLE PRICE
10 1 ABC 20
11 3 XYZ 15
12 1 MNOP 12
输出:
STATE CID NAME
NY 1 Peng
IL null null
我需要输出每个州购买量最高(最大订单)的客户的 cid 和名称。我可以为每个客户输出 cid、姓名、状态和购买次数,但不能为每个状态获取它,因为在使用 group by 函数时我不能使用更多列:
select c.cid, c.name, c.state, d.orders
from customer c
left join (select cid, count(pid) as orders
from purchase
group by cid) d
on c.cid = d.cid;
谁能建议我应该如何进行?
【问题讨论】:
-
您在谈论“最大订单”,但在 ORDERS 表中您只有一个 PRICE 列。你的意思是“最高价格”吗?另外,如果在一个州有两个或多个客户以最高价格捆绑,您希望退回什么?将它们都(全部)归还?或者只是其中一个,随机的?
-
没有。不是价格。我的意思是最大订单数。意思是,客户完成的最大购买量。
-
对于第二部分,如果出现平局,随机客户或两者(全部)都有效。任何输出都是可以接受的。谢谢
-
您的问题不清楚。根据您上面的措辞,您需要按州分组的 cid 和客户名称,但您已经拥有 cid、客户名称、州和订单数量。请更具体地说明您的问题,并提供您预期输出的示例表。
-
@EdwardRusu 对不起,我是新手。我没有订单数量。我只有一个名为 purchase 的表,它记录了各个客户下的单个订单。我已经给出了上面的输出表。也许你没看到。请告诉我还有什么需要澄清的。