1

私は SQL Server にかなり慣れていないので、かなり基本的なことをしようとしていますが、重要な概念が欠けているに違いありません。

まず、次の話です。

  • 注文の項目を含むテーブル X があります
  • 注文自体を含むテーブルYがあります

ラインアイテムの数を注文数で割って、平均注文のラインアイテム数を生成したいと考えています。

私はいくつかのオプションを試しました:

  1. 2 つのテーブルを結合してから、X の count() を Y のカウントで除算してみました。残念ながら、X から Y ではすべての Y のエントリが作成されるため、除算の結果は 1 になります。

    select count(x) / count (y) 
    from x 
    join y
    
  2. 「明確な」注文をカウントしようとしましたが、明確なラインアイテムではなく、選択ステートメントの半分を「明確な」ものにしようとしました。selectステートメントの半分を個別にすることはできないことがわかりました。

    select count(x) / distinct count (y) 
    from x 
    join y
    
  3. 新しいテーブルを作成して、注文数の合計を新しいテーブルに出力してみました。次に、行項目の数をそのテーブルの値で割ろうとしました。テーブルを結合しない限り、それは機能せず、元の問題に戻ります。

    select count(x) / temptable
    from x
    join temptable
    
  4. ステートメントを変数に出力する方法を調べてみたSQLので、その変数を除算に使用できましたが、どこにも行きませんでした。

  5. 私は、この問題を示唆しているが実際には解決していない多くのスタック オーバーフローの投稿を注意深く読みました。

どんな助けでも心から感謝します!

4

2 に答える 2

2
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
于 2012-11-08T22:50:59.460 に答える
1

これを行う最も簡単な方法は、サブクエリを使用しないことです。

select count(*) * 1.0 / count(distinct order_id)
from line_items

これは、すべての注文に少なくとも 1 つの品目があることを前提としています。そうでない場合は、次のことができます。

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
于 2012-11-08T22:54:39.310 に答える