这可能已经得到了回答,但我无法找到任何指向正确方向的东西。我将不胜感激任何帮助。
我正在使用名为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
答案 0 :(得分:2)
最简单的方法是使用条件聚合:
select oi.order_id, avg(oi.status = 'complete')
from order_items oi
group by oi.order_id;
oi.status
返回true,在数字上下文中将其视为1。所有行的平均值都是您正在寻找的。 p>
答案 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