2017-06-12 12 views
0

私は何時間も探してきましたが、どうやってこれを行うのか分かりません。問題は次にあります。私は2つのテーブル、顧客と注文を持っています。 お客様にはidと5〜6の列があり、それらは空であり、ランダムなデータで埋める必要があります。この目的のために、orders_accepted_campaignsをデータとして入力したい列にします。 オーダーテーブルで我々はcustomer_idsと注文値を持っています。だから、このorders_accepted_campaignsフィールドを乱数で記入して、各顧客が作成した注文数(count(customer_id) from orders group by customer_id)よりも少ないので、4つの注文と5を持つことはできません。orders_accepted_campaignsMySQLは列の値に依存する乱数を生成します

+0

これは簡単な演算です。 RAND()は0と1の間の数値を生成します。その数に受注数を掛けます。 – Strawberry

+0

私はしばらく試していたので、それが些細で愚かなことではないと思っていました。まあ、それは私のために寝る時間のように見えます。私はそれを受け入れることができるように答えとして投稿していただけますか? –

+0

私は愚かさだけを拡大することを恐れる。 – Strawberry

答えて

0

updateたい:

update customers c left join 
     (select customer_id, count(*) as cnt 
     from orders o 
     group by customer_id 
     ) o 
     on o.customer_id = c.customer_id 
    set orders_accepted_campaigns = floor(rand() * cnt); 

注:顧客はゼロオーダーを持っているとき、これは0に値を設定します。

+0

はい!これは私が探していたものです。他の値(この場合は注文数)よりも低い乱数でテーブルを更新するクエリ。小さな「エラー」しかありません。グループでcustomer_idが:)で見つかりません。ありがとう、私はこれを答えとして受け入れます。 –

2

0からk -1までの均等に分布するランダムな整数を使用する場合は、この式を使用します。

TRUNCATE(RAND() * k , 0) 

CAST;切り詰めよりも丸くなり、一様分布が崩れる。それはあなたのような音

+0

ご協力ありがとうございます。でも、私は@Gordon Linoffsの答えのようなものを探していたので、私は彼の答えを受け入れます! –

関連する問題