2

私はeコマースマーケットプレイスをやっています。この市場では多くの売り手が売っています。販売者ごとに、ベストセラーリストを表示したいと思います。

データベースはSQLServerにあります。この場合、2つのメインテーブルがあります。

表1:各注文の注文された製品を格納します。フィールドには、SellerID、OrderID、ProductID、およびQuantityが含まれます。

表2:製品マスターテーブル。フィールドには、ProductID、...が含まれます。

注文数が最も多い上位10の製品を取得するためのクエリを実行するにはどうすればよいですか?以下の私のSQLは機能していないようです...

SELECT TOP (10) SUM(d.Quantity) AS total, d.ProductID, p.Title
From OrderDetails d, Products p
WHERE d.SellerID = 'xxx' AND
d.ProductID = p.ProductID
GROUP by d.ProductID
ORDER BY total DESC

どんな助けでも大歓迎です。ありがとうございました!

4

3 に答える 3

1
select *, d.s
from products p
inner join 
(
   select top 10 productid, sum(quantity) as s
   From OrderDetails
   group by productid
   order by sum(quantity) desc 
) 
d on d.productid = p.productid

この SQLFiddle の例を参照してください

于 2012-07-04T08:55:41.987 に答える
0

これは単なる推測です。「ほとんどの注文」が必要な場合は、数量を合計するのではなく、注文をカウントしたいと思います。

SELECT TOP 10 
COUNT(d.OrderID) AS total, d.ProductID, p.Title
FROM OrderDetails d 
INNER JOIN Products p ON d.ProductID = p.ProductID
WHERE d.SellerID = 'xxx' 
GROUP by d.ProductID, p.Title
ORDER BY COUNT(d.OrderID) DESC

他に何を修正しましたか:

  • GROUPBYに列がありませんでした。SELECT句にあるすべての列に名前を付ける必要がありますが、集計関数にはありません。

  • ORDER BY句では、SELECT句で行ったのとまったく同じ名前を付ける必要があります。エイリアスはSQLServerではうまく機能しません。

  • WHERE句で結合を指定するのを忘れがちなエラーが少ないINNERJOIN構文を使用しました。

于 2012-07-04T08:34:11.030 に答える
-1

これは、使用しているデータベースの種類が原因ではなく、集計関数が原因です。stackoverflow には、この問題に関する多くの Q & A があります。探してみてください。

于 2012-07-04T08:37:16.320 に答える