1

次のような問題があります。

MySQL: サブクエリの合計値

いくつかのフィルタリングを行う大きな where セクションがあり、さまざまなカテゴリを実行しているときに select セクションでフィルタリングを行いたい場合。

私の状況は、合計ではなく個別の使用ケースを使用する必要があるという点で異なります。複数の注文があり、特定の製品の注文数をカウントしたい (他の条件に基づいて他の集計の束を返すことに加えて) )。ただし、技術的な問題により、注文システムによって、同じ ProductID と同じ OrderID を持つ 2 つのほぼ同一の行が作成されることがあります (他の列は、注文時間など、わずかに異なります)。ただし、特定の製品の個別の注文数のみをカウントする必要があります(たとえば、一意の OrderID ごとに +1 のみ)。ただし、他の一部の集計では、重複したエントリを使用する必要があるため、選択セクションでカウントにケース サブクエリを使用する必要があります。

このサンプル データベースでほぼ機能するクエリを作成しました。

SELECT COUNT(ProductID)
, COUNT(CASE WHEN ProductID = 51 THEN DISTINCT OrderDetailID END) 
FROM OrderDetails

ただし、構文エラーについて不平を言います。「DISTINCT」を削除するとすぐに正常に動作しますが、これにより重複がカウントされます (サンプル データベースには存在しませんが、私のデータベースには存在します)。そのため、「DISTINCT」が機能する必要があります。

4

2 に答える 2

3

あなたのクエリは非常に近いです。distinctを の前に移動するだけですcase:

SELECT COUNT(ProductID), 
       COUNT(DISTINCT CASE WHEN ProductID = 51 THEN OrderDetailID END) 
FROM OrderDetails
于 2013-07-10T19:47:51.567 に答える