0

MS SQL 2012 の使用

気になる3列のテーブルを用意する

SubcategoryID (int) メーカー (nvarchar) モデル (nvarchar)

最も人気のある上位 10 の製造元 (テーブルに最も多くのエントリがあるもの) を取得し、それら 10 の製造元ごとに最も人気のある 10 のサブカテゴリを取得し、それらの各サブカテゴリで最も人気のある上位 5 つのモデルを取得します。

最終的に、十分なデータがあると仮定すると、最大 500 件の結果が得られるはずです。

上位 10 メーカー X 上位 10 サブカテゴリ X 上位 5 モデル

私がこれまでにこれを行うのに最も近いのはこれです:

    SELECT COUNT(*), SubcategoryID, Manufacturer from dbo.Product
WHERE ManufacturerID IN
(
SELECT TOP 10 Manufacturerid FROM dbo.Product
WHERE Manufacturer != '' AND Manufacturer != 'NOT SPECIFIED' AND Manufacturer IS NOT NULL AND ManufacturerID IS NOT null
AND Deleted = 0 AND StatusID = 1
GROUP BY Manufacturerid
ORDER BY COUNT(*) DESC
)
GROUP BY Manufacturer, dbo.Product.SubcategoryID
ORDER BY  Manufacturer, COUNT(*) desc

しかし、それは実際には機能しません。なぜなら、各メーカーに対して 10 を超えるレコードが得られるからです。まだモデルを入手しようとはしていません。

これについての助けに感謝します、ありがとう

編集:私はこれを正しく説明しませんでした.トップ10の最も人気のあるメーカー全体ではなく、各サブカテゴリ内のトップ10の最も一般的なメーカーを取得したい.

言い換えると:

select top 10 manufacturers from product where subcategoryid = 123 group by manufacturer order by count(*) desc

しかし、テーブルのサブカテゴリごとにそれが必要です。そして、各サブカテゴリ/メーカー内の上位 5 モデル

4

1 に答える 1

0

あなたの例では、モデルを各メーカーのトップ 10 に限定していません。

これが機能するかどうかを確認してください...

SELECT Manufacturer, Model, SubCategoryID
FROM Product
WHERE Manufacturer IN (
        SELECT TOP 10 Manufacturer
        FROM Product
        GROUP BY Manufacturer
        ORDER BY COUNT(*) DESC )
AND SubCategoryID IN (
        SELECT TOP 10 SubCategoryID
        FROM Product a
        WHERE a.Manufacturer = Product.Manufacturer
        GROUP BY SubCategoryID
        ORDER BY COUNT(*) DESC )
AND Model IN (
        SELECT TOP 5 Model
        FROM Product a
        WHERE a.Manufacturer = Product.Manufacturer
        AND a.SubCategoryID = Product.SubCategoryID
        GROUP BY Model
        ORDER BY COUNT(*) DESC )
于 2013-10-23T19:16:13.410 に答える