SQL在表中划分子查询

时间:2015-07-15 17:49:15

标签: mysql division

这可能已经得到了回答,但我无法找到任何指向正确方向的东西。我将不胜感激任何帮助。

我正在使用名为order_items的表格,如下所示:

+----------------------------------------+
|  id                 order_id   status  |
+----------------------------------------+
| 2014001            1          complete |
| 2014002            1          canceled |
| 2014003            3          complete |
| 2014004            4          canceled |
| 2014005            1          canceled |
| 2014006            1          complete |
| 2014007            2          canceled |
| 2014008            3          complete |
+----------------------------------------+

order_items.id是主键。我想写一个查询,它会在order_items complete内找到order_id状态+----------------------------+ | Percentage order_id | +----------------------------+ | .5 1 | | 0 2 | | 1 3 | | 0 4 | +----------------------------+ 的百分比 所以结果应该是这样的:

select  
order_items.order_id ,
(select count(order_items.status) from order_items where order_items.status='complete')/ count(order_items.status)
from order_items 
GROUP BY order_items.order_id

这是我尝试的代码,但它不起作用

has_many: orders

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用条件聚合:

select oi.order_id, avg(oi.status = 'complete')
from order_items oi
group by oi.order_id;

oi.status返回true,在数字上下文中将其视为1。所有行的平均值都是您正在寻找的。

答案 1 :(得分:0)

试试看是否有效

select

order_items.order_id ,
 (select count(order_items.id) from order_items 
where order_items.status=  'complete')/ count(order_items.id)
from order_items 
GROUP BY order_items.order_id