আমি কীভাবে মাইএসকিউএল-তে একটি কলামের মধ্যমান মান খুঁজে পেতে পারি?


10

আমি কেবল দুটি ডাটাবেস ক্যোয়ারী দিয়ে এটি করার কল্পনা করতে পারি। প্রথমটি ডাটাবেসে সারিগুলির সংখ্যা সন্ধান করে এবং দ্বিতীয়টি ORDER BYকলামটিতে আমি আগ্রহী এবং LIMIT X, 1যেখানে X সারিগুলির অর্ধেক সংখ্যায় রয়েছে তার সাথে নির্বাচন করে।

শুধুমাত্র একটি ক্যোয়ারী দিয়ে এটি করার কোনও সহজ উপায় আছে?

এই মুহূর্তে আমি আমার গণনায় গড় ব্যবহার করছি, তবে আমি মনে করি এর মাধ্যমটি আরও ভাল হবে; মানগুলির সাথে কোনও উচ্চতর বাউন্ড নেই এবং সেগুলি নীচে 0 দ্বারা আবদ্ধ হয়।


সম্পাদনা: হ্যাঁ, আমি 'মিডিয়ান' বলতে চাইছিলাম তবে কিছুটা মস্তিষ্কে ত্রুটি ছিল এবং 'গড়' অনুসন্ধান করা হয়েছিল। উত্তরটি এখন স্ট্যাকওভারফ্লোতে পেয়েছি


metaকিছুটা পড়ার পরে মনে হয় এই প্রশ্নটি এখানে বা এসওতে হওয়া উচিত আবহাওয়ার বিষয়ে একটি বিভাজন রয়েছে। আমি বুঝতে পারি এটি নিঞ্জা স্তরের ক্যোয়ারী নাও হতে পারে তবে এটি আমাকে স্ট্যাম্পড করে দিয়েছে এবং আমি যে সংস্থার জন্য কাজ করি (সেখানে মোট 6 জন) ডিবিএ নেই।
JIStone

উত্তর:


6

একটি মাইএসকিউএল টেবিল থেকে মধ্যম মানের গণনা করার জন্য এখানে বেশ খানিকটা আলোচনা রয়েছে। 'মিডিয়ান' এর জন্য কেবল পৃষ্ঠাটি অনুসন্ধান করুন।

সরু হিসাবে, এটি আমার অনুতাপ হিসাবে আঘাত করে যে এটি করার জন্য কোনও বিল্ট-ইন ফাংশন নেই। মিডিয়ান প্রায়শই গড় প্রবণতার চেয়ে বেশি বর্ণনামূলক। অ্যাক্সেস / ভিবিএর কার্য তালিকায় একই গর্ত রয়েছে।


আমি রাজী. যখন একটি বড় ক্যোয়ারিতে কাজ করা হয় তখন অতিরিক্ত রেখাগুলি পুরো জিনিসটিকে আরও জটিল এবং ডিবাগ / রক্ষণাবেক্ষণ করা শক্ত করে তোলে।
JIStone

2

আমি এমন কোথাও এমন কোনও সমাধান দেখিনি যা একটি একক ক্যোয়ারিতে মধ্যস্থতা অর্জন করতে পারে। আমি টেম্প টেবিলগুলিতে কিছু মনে করি না, তবে সেগুলি যদি প্রয়োজনীয় না হয় তবে দুর্দান্ত! আমি এখানে যা এলাম তা এখানে:

SELECT AVG(profit) median, nofitems FROM(
  SELECT x.profit, SUM(SIGN(1.0-SIGN(y.profit-x.profit))) diff, count(*) nofitems, floor(count(*)+1/2)
  FROM brand_prof x, brand_prof y
  GROUP BY x.profit
  HAVING SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = floor((COUNT(*)+1)/2)
      OR SUM(SIGN(1.0-SIGN(y.profit-x.profit))) = ceiling((COUNT(*)+1)/2)
) x;

আমি এটি একটি এমনকি সেট জন্য পরীক্ষা, এবং সঠিক উত্তর পেয়েছি। ব্র্যান্ড_প্রোফ মাত্র দুটি কলাম: ব্র্যান্ড_নাম এবং লাভ, একটি দশমিক মান। যদি এটি পূর্ণসংখ্যার মান হত তবে আপনাকে "সিলিং ((CAST COUNT (*) হিসাবে নির্ধারিত হিসাবে)) দিতে হবে ..." আমি যা পরীক্ষা করেছি তার চেয়েও বেশি। দুর্ভাগ্যক্রমে আমি লেখককে ভুলে গেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.