0

mySQLクエリ-約1000行を含むテーブル'database'。'table_product_options'があります。このテーブルには、「product_id」ごとに4x行が含まれている必要があります。これは、「customer_group」ごとに割り当てられた同じ製品です(以下に示す)。これは、customer_groupあたり最大250行に相当します。

ただし、各'customer_group'でCOUNTを実行したところ、グループa + cのエントリがいくつか欠落していることがわかりました(グループb + dの場合は それぞれ合計250行ですが、グループa + cの場合は245行のみです)。

+----------------+----------------+
| product_id     | customer_group |
+----------------+----------------+
|       1        |        a       | }
|       1        |        b       | }
|       1        |        c       | }-each 'product_id' has 4x 'customer_group' attached
|       1        |        d       | }
|       2        |        a       |
|       2        |        b       |
|       2        |        c       | << 1 missing entry (customer_group = d)
|       3        |        a       | << 3 missing entries (customer_group = b, c, d)
+----------------+----------------+

SELECTクエリ(または代替)を実行して、割り当てられている行が4行未満の「product_id」を表示するにはどうすればよいですか?または、言い換えると、不足しているエントリを見つけるにはどうすればよいですか?

SELECTとWHERENOTEXISTを組み合わせたものなど、さまざまなクエリを試しましたが、アイデアが不足しています。私は12のスタックオーバーフローの回答を変更しましたが、どれも非常に適切ではなく、動作するように構文を変更することができませんでした。

どんな助けでも大歓迎です(私は同じ問題が将来再び現れると予想しているので..)。目でテーブルを洗ってしまうかもしれません!

4

2 に答える 2

0
select product_id, count(customer_group)
from table_product_options
group by product_id
having count(customer_group) < 4

持っているものとグループ化するものを行ごとに切り替える必要があるかもしれません。注文が混乱します。

于 2013-03-20T12:15:16.073 に答える
0

逃したグループを見つけるための可能な組み合わせを作成します。

select product_id, indicator, case when indicator = 1 
                                   case when availe = 'a' then 'b,c,d' 
                                   when availe = 'b' then 'a,c,d' 
                                   when availe = 'c' then 'a,b,d'
                                   else 'a,b,c' end
                               case when indicator = 2
                                     case when availe = 'a,b' then 'c,d'
                 //Like wise Give the possible combination for finding missing group
                                end as missing_group 
 from
(select product_id, count(customer_group) as indicator, group_concat(customer_group) as availe
from table_product_options
group by product_id) a where indicator < 4
于 2013-03-20T12:30:31.257 に答える