MySQL将结果分成几个变量?

时间:2016-04-15 23:03:22

标签: mysql sql procedure

我想向我展示每个买家的订单数量。这非常有效。

 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;

所以它实际上很简单,但我现在还没有看到解决方案......也许你能够解决这个问题。

2 个答案:

答案 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;

sqlfiddle

输出:

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。这是一个等待发生的错误。它仅基于字段名称连接表 - 它甚至不使用声明的外键。相反,将密钥放在usingon子句中。