我想向我展示每个买家的订单数量。这非常有效。
select name, count(orderid) from buyer natural join reservation group by buyerid;
我得到两个结果,一个有12个订单,另一个有4个订单。现在我想把这两个结果分成他们的订单数量。 例如,购买超过10个对象的所有人都应使用' +'进行分类。买的人< 10个对象应该得到一个' - '。困难在于表预订中只有单个订单,这意味着:人A订购了一个船(Obj1),人A订购了一个DVD(Obj2)等... 订单是此表中的单个数据集,没有总和或分组(这就是上面选择语句的原因)。
但是,我有另一个空表来放置" name"和#34;班级#34;它应该通过使用程序来完成。
像这样:
create procedure dividing (in decisionpoint int)
begin
set @var = select count(orderid) from buyer....group by buyerid;
-->Error because I get 2 Rows (Allowed is only one, but how can I solve this? I will continue with the logic)
IF @var >= decisionpoint THEN do....
ELSE do...
end;
所以它实际上很简单,但我现在还没有看到解决方案......也许你能够解决这个问题。
答案 0 :(得分:0)
您可以将查询转换为内部查询,并执行另一个外部SELECT以检查您的条件
SELECT name,orders,
CASE WHEN orders > 10 THEN "+"
ELSE "-"
END AS status
FROM
(select name, count(orderid) as orders
from buyer
natural join reservation
group by buyerid
)AS T;
输出:
name orders status
A 20 +
B 4 -
答案 1 :(得分:0)
根据你的说法,你会写这样的代码:
insert into nameclass(name, class)
select b.name,
(case when count(r.orderid) < 10 then '-' else '+' end)
from buyer b join
reservation r
using (??)
group by b.buyerid;
你真的不能使用if
子句,因为它在标量上运行,但你需要对行进行操作。
作为备注:不要使用natural join
。这是一个等待发生的错误。它仅基于字段名称连接表 - 它甚至不使用声明的外键。相反,将密钥放在using
或on
子句中。