DISTINCT মানগুলির উপস্থিতি গণনা করুন


218

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

উদাহরণ ডিবি

id         name
-----      ------
1          Mark
2          Mike
3          Paul
4          Mike
5          Mike
6          John
7          Mark

প্রত্যাশিত ফলাফল

name       count
-----      -----
Mike       3
Mark       2
Paul       1
John       1

উত্তর:


395
SELECT name,COUNT(*) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC;

2
এখানে করে গ্রুপটি ঠিক কী? উদ্দেশ্য কী তা পরিষ্কার নয়? মনে হয় এটির সাথে কাজ করা উচিত যদি আপনি যেখানে কেবল স্পষ্টভাবে এটি পড়েন।
জেমস

19
যদিও অ্যাম্বারের জিজ্ঞাসাটি প্রশ্নের সঠিক উত্তর, আমি নতুন লোককে বিপথগামী না করার জন্য তার মন্তব্যে একটি সংশোধন করতে চাই। আপনি যদি কোনও মাইএসকিউএল কোয়েরিতে "গোষ্ঠী দ্বারা" ছেড়ে যান, আপনি [মাইক, ১], [মাইক, ১] পাবেন না, আপনি একটি একক ফলাফল পাবেন যা প্রথম সারির নাম হবে এবং ফিরে আসা একটি গণনা রয়েছে সারণীতে সারি সংখ্যা, সুতরাং এই ক্ষেত্রে [চিহ্নিত করুন, 7]। গণনা () হিসাবে, একটি সামগ্রিক ফাংশন পুরো ডেটাসেটে সুমিং, গণনা বা নির্দিষ্ট ক্ষেত্রটিকে এক সারি পর্যন্ত উপসংহারে কাজ করে।
দলবদ্ধভাবে

3
আমি যে সমস্যার সাথে লড়াই করেছিলাম তা হ'ল ডুপ্লিকেট ছাড়াই ফলাফলগুলি মুছে ফেলা। আপনি count(*) > 1একটি whereধারাতে কোনও ছোঁড়াতে পারবেন না কারণ এটি একটি সামগ্রিক ফাংশন। আপনি খুব অবহেলিত বার্তা পান: "গ্রুপ ফাংশনটির অবৈধ ব্যবহার"। সঠিক ভাবে ওরফে করার গণনা হয় name,COUNT(*) as cntএবং যোগ হচ্ছে দফা যেমন: HAVING count > 1
প্যাট্রিক এম

4
@ পেট্রিকএম হ্যাঁ, HAVINGএমন শর্তের জন্য যা সংহত হওয়ার পরে প্রয়োগ করা উচিত, অন্যদিকে WHEREএমন শর্তের জন্য যা এর আগে প্রয়োগ করা উচিত। (এটির ভাবনার আর একটি উপায় হ'ল WHEREএটি মূল সারি ডেটার HAVINGক্ষেত্রে প্রযোজ্য ; আউটপুট সারি ডেটার ক্ষেত্রে প্রযোজ্য))
অ্যাম্বার

2
একটি ভাল-নির্মিত এসকিউএল বিবৃতি সম্পর্কে খুব সন্তোষজনক কিছু রয়েছে।
জোশুয়া পিন্টার 22'14

14

এরকম কিছু সম্পর্কে:

SELECT
  name,
  count(*) AS num
FROM
  your_table
GROUP BY
  name
ORDER BY
  count(*)
  DESC

আপনি নামটি এবং এটি প্রদর্শিত হওয়ার সংখ্যাটি নির্বাচন করছেন তবে নাম অনুসারে গ্রুপিং করুন যাতে প্রতিটি নাম মাত্র একবারে নির্বাচিত হয়।

অবশেষে, আপনি সর্বাধিক ঘন ঘন প্রদর্শিত হওয়া ব্যবহারকারীদের প্রথমে আসতে ডেস্কেন্ডিং অর্ডারে সংখ্যার দ্বারা অর্ডার করুন।


আপনার জিজ্ঞাসা আমাকে সাহায্য করেছে। এটি ফলাফল হিসাবে কয়েকটি সারি ফেরত দেয়। আমি এই ফলাফলের গণনা কীভাবে সন্ধান করতে চাই তা জানতে চেয়েছিলাম। কয়েকটি ক্যোয়ারী চেষ্টা করে দেখে মনে হচ্ছে এটি সামগ্রিকভাবে একটি গণনা করতে সক্ষম হবে। আপনি কি এই সাহায্য করতে পারেন?
নাভ

@ নাভ - একটি গণনা? সারি সংখ্যা ফিরে এল? যে SELECT COUNT(DISTINCT name) as count FROM your_tableটেবিলের মোট সারির একটি গণনা জন্য, ছাড়া প্যাসকেলের ক্যোয়ারী না group byবিবৃতি।
শরত্কাল লিওনার্ড

এক মিনিটে কি তফাত হয়!
চক লে বাট

6

ভাল পারফরম্যান্সের জন্য সবেমাত্র অ্যাম্বারের COUNT (*) কে COUNT (1) এ পরিবর্তন করা হয়েছে।

SELECT name, COUNT(1) as count 
FROM tablename 
GROUP BY name 
ORDER BY count DESC;

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