MYSQL ব্যবহার করে একটি এলোমেলো সংখ্যা তৈরি করা number


98

আমি জানতে চাই যে একটি নির্বাচিত প্রশ্নের সাথে 100 এবং 500 এর মধ্যে এলোমেলোভাবে উত্পন্ন সংখ্যা নির্বাচন করার উপায় আছে।

যেমন: SELECT name, address, random_number FROM users

আমাকে এই সংখ্যাটি ডিবিতে সঞ্চয় করতে হবে না এবং কেবল এটির উদ্দেশ্য প্রদর্শনের জন্য এটি ব্যবহার করতে হবে।

আমি এটির মতো কিছু চেষ্টা করেছি, তবে এটি কাজ করতে পারে না ..

SELECT name, address, FLOOR(RAND() * 500) AS random_number FROM users

আশা করি কেউ আমাকে সাহায্য করবে। ধন্যবাদ


4
দয়া করে এই লিঙ্কে যান stackoverflow.com/questions/1045138/...
DevelopmentIsMyPassion

উত্তর:


149

এটি আপনার যা চান তা দেওয়া উচিত:

FLOOR(RAND() * 401) + 100

সাধারণভাবে, > এবং সমেতের FLOOR(RAND() * (<max> - <min> + 1)) + <min>মধ্যে একটি সংখ্যা উত্পন্ন করে ।<min<max>

হালনাগাদ

এই সম্পূর্ণ বিবৃতি কাজ করা উচিত:

SELECT name, address, FLOOR(RAND() * 401) + 100 AS `random_number` 
FROM users

আমি এই কোডটি কীভাবে ব্যবহার করি। আমি এর মতো চেষ্টা করেছি - ফ্লোর (র্যান্ড () * 401) + 100 নাম্বার হিসাবে, তবে কাজ করছি না
TNK

দ্রষ্টব্য: আমার ডিবিতে 'নাম্বার' নামে একটি কলাম নেই। এটি অবশ্যই গতিশীল কলাম তৈরি করা উচিত। এটা কি সম্ভব?
টিএনকে

4
@ এডহেল আসলে আমি মনে করি round()একটি অ-ইউনিফর্ম বিতরণ দেবে।
জ্যাক

4
ফলটি একটি চলকতে আরও ভাল সঞ্চয় করুন এবং যদি আপনার মাস্টার দাসের প্রতিলিপি থাকে তবে ভেরিয়েবলটি ব্যবহার করুন। SET @r=FLOOR(RAND() * 401) + 100তাহলে SELECT @r
কিয়ান চেন

4
RAND(), UUID(), NOW()Indeterministic ফাংশন আছে। এই জাতীয় ক্রিয়াকলাপগুলির অনুলিপিটির জন্য বিন লগে লিখিত হওয়া থেকে বিরত থাকতে হবে। উদাহরণ স্বরূপ. মাস্টার এবং ক্রীতদাসদের ক্ষেত্রে ক্ষেত্রগুলির INSERT INTO t SET ID=UUID();মান IDপৃথক হতে পারে। পরিবর্তে এটি লিখিত হওয়া দরকার SET @uuid:=UUID();এবং তারপরে INSERT INTO t SET ID=@uuid;, তারপরে সেগুলি একক লেনদেনে চালাও। এটি প্রতিলিপি নিরাপদ হবে। এটি এই প্রশ্নের জন্য কিছুটা বন্ধ বিষয়। এটি বলে না যে আপনার উত্তরের কোনও সমস্যা আছে। :)
কিয়ান চেন

10

যেহেতু RANDএকটি সংখ্যা তৈরি হয় <0 = v <1.0 ( ডকুমেন্টেশন দেখুন ) আপনার ROUNDউপরের বাউন্ড (এই ক্ষেত্রে 500) এবং নিম্ন সীমা (এই ক্ষেত্রে 100) পেতে পারবেন তা নিশ্চিত করার জন্য আপনাকে ব্যবহার করতে হবে

সুতরাং আপনার প্রয়োজনীয় পরিসরটি তৈরি করতে:

SELECT name, address, ROUND(100.0 + 400.0 * RAND()) AS random_number
FROM users

এই কোডিংটি এইভাবে কাজ করছে - নির্বাচন করুন রাউন্ডটি নির্বাচন করুন (100.0 + 400.0 * RAND ()) এলোমেলো_সংখ্যক হিসাবে, তবে এখন আমার প্রশ্নের সাথে কাজ করছেন
TNK

এলোমেলো_ সংখ্যা কলামটি অবশ্যই আমার কোয়েরির সাথে এলোমেলোভাবে কলাম তৈরি করা উচিত।
TNK

4
এই পদ্ধতিটি সম্ভবত প্রথম এবং শেষ সংখ্যাটি কম করবে।
স্লোবোডান পেজিক

4

এই উত্তরের অতিরিক্ত, একটি ফাংশন তৈরি করুন

CREATE FUNCTION myrandom(
    pmin INTEGER,
    pmax INTEGER
)
RETURNS INTEGER(11)
DETERMINISTIC
NO SQL
SQL SECURITY DEFINER
BEGIN
  RETURN floor(pmin+RAND()*(pmax-pmin));
END; 

এবং কল করুন

SELECT myrandom(100,300);

এটি আপনাকে 100 এবং 300 এর মধ্যে এলোমেলো সংখ্যা দেয়


3

আপনি FLOOR(RAND() * n) as randnum(এন একটি পূর্ণসংখ্যা) ব্যবহার করে একটি এলোমেলো সংখ্যা তৈরি করতে পারেন , তবে যদি আপনার একই র্যান্ডম সংখ্যার পুনরাবৃত্তি করতে না হয় তবে আপনাকে কিছুটা টেম্প টেবিলের মধ্যে রাখতে হবে। সুতরাং আপনি এটির সাথে এটি পরীক্ষা করতে পারেন where randnum not in (select * from temptable)...


3

এই দুজনেই সুন্দরভাবে কাজ করছে:

select round(<maxNumber>*rand())

FLOOR(RAND() * (<max> - <min> + 1)) + <min> // generates a number
between <min> and <max> inclusive.

0

এটা সঠিক সূত্র থেকে পূর্ণসংখ্যার খুঁজে পেতে iকরার jযেখানেi <= R <= j

FLOOR(min+RAND()*(max-min))

4
এটি ভুল, এটি কখনই জ (বা সর্বোচ্চ) উত্পাদন করে না। এটি i <= আর <জে সংখ্যা তৈরি করে।
jlh

4
হওয়া উচিত:FLOOR(min+RAND()*(max-min+1))
ডেভিড রডরিগস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.