如何在另一个查询中使用SQL Server查询的结果

时间:2012-11-08 22:46:19

标签: sql sql-server

我对SQL Server相当新,并尝试做一些看起来应该是相当基本的事情,但我必须错过一个重要的概念。

首先,这是故事:

  • 我的表格X包含订单中的订单项
  • 我的表Y包含订单本身

我想将订单项数除以订单数,从而生成平均订单上的订单项数。

我尝试了几个选项:

  1. 我尝试将两个表连接在一起,然后将X的count()除以Y的计数。不幸的是,通过X到Y,它为每个Y创建一个条目,因此除法的结果是一。

    select count(x) / count (y) 
    from x 
    join y
    
  2. 我尝试通过尝试计算“不同”订单而不是不同的订单项来使选择语句的一半“不同”。事实证明,你不能使选择陈述的一半变得明显。

    select count(x) / distinct count (y) 
    from x 
    join y
    
  3. 我尝试制作一张新表,然后将订单数量的总和输出到新表中。然后我尝试将行项目的数量除以该表的值。除非我一起加入表格,否则这不起作用,这使我回到原来的问题。

    select count(x) / temptable
    from x
    join temptable
    
  4. 我试着查找如何将SQL语句输出到变量,这样我就可以将该变量用于除法,但是无处可去。

  5. 我已经仔细阅读了很多关于这个问题的堆栈溢出帖子,但实际上并没有解决它。

  6. 真诚地感谢任何帮助!

2 个答案:

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