我对SQL Server相当新,并尝试做一些看起来应该是相当基本的事情,但我必须错过一个重要的概念。
首先,这是故事:
我想将订单项数除以订单数,从而生成平均订单上的订单项数。
我尝试了几个选项:
我尝试将两个表连接在一起,然后将X的count()除以Y的计数。不幸的是,通过X到Y,它为每个Y创建一个条目,因此除法的结果是一。
select count(x) / count (y)
from x
join y
我尝试通过尝试计算“不同”订单而不是不同的订单项来使选择语句的一半“不同”。事实证明,你不能使选择陈述的一半变得明显。
select count(x) / distinct count (y)
from x
join y
我尝试制作一张新表,然后将订单数量的总和输出到新表中。然后我尝试将行项目的数量除以该表的值。除非我一起加入表格,否则这不起作用,这使我回到原来的问题。
select count(x) / temptable
from x
join temptable
我试着查找如何将SQL
语句输出到变量,这样我就可以将该变量用于除法,但是无处可去。
我已经仔细阅读了很多关于这个问题的堆栈溢出帖子,但实际上并没有解决它。
真诚地感谢任何帮助!
答案 0 :(得分:1)
SELECT AVG(1.0 * line_item_count)
FROM (
SELECT order_id, COUNT(*) as line_item_count
FROM line_items
GROUP BY order_id
) line_item_counts
答案 1 :(得分:1)
最简单的方法是不使用子查询:
select count(*) * 1.0 / count(distinct order_id)
from line_items
这假设所有订单至少有一个订单项。如果不是这种情况,您可以这样做:
select count(*) * 1.0 / (select count(*) from orders)
from line_items
或者,如果您不喜欢select
子句中的子查询,则可以改为使用连接:
select count(li.line_item_id)*1.0/count(distinct o.order_id)
from orders o left outer join
line_items li
on o.order_id = li.order_id