2017-06-12 91 views
0

我一直在尋找幾個小時,我不知道如何做到這一點。接下來的問題是。我有兩張桌子,顧客和訂單。 客戶有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的答案,所以我會接受他的回答! –