এক ক্ষেত্রের গণনা যেখানে একের চেয়ে বেশি হয় তা নির্বাচন করুন


102

আমি এরকম কিছু করতে চাই:

SELECT * 
  FROM db.table 
 WHERE COUNT(someField) > 1

আমি কীভাবে এটি MySQL এ অর্জন করতে পারি?

উত্তর:


146

ব্যবহার করুন HAVING, না WHEREদফা, সমষ্টিগত ফলাফলের তুলনা জন্য।

ক্যোরিয়াকে ফেস ভ্যালুতে নেওয়া:

SELECT * 
  FROM db.table 
HAVING COUNT(someField) > 1

আদর্শভাবে, ধারাটিতে GROUP BYযথাযথ মূল্যায়নের জন্য একটি সংজ্ঞায়িত হওয়া উচিত HAVING, তবে মাইএসকিউএল গ্রুপের মাধ্যমে গোপন কলামগুলিকে মঞ্জুরি দেয় না ...

এটি কি অনন্য সীমাবদ্ধতার জন্য প্রস্তুত someField? দেখে মনে হচ্ছে এটি হওয়া উচিত ...


11
GROUP BYঅবশ্যই দরকার (যদি এটি কোনও মাইএসকিউএল অ মানক জিনিস না হয়)?
মার্টিন স্মিথ

@ মার্টিন স্মিথ: প্রশ্নের মূল্য জিজ্ঞাসাবাদ করেছেন; গ্রুপ ইস্যু দ্বারা সম্বোধন (লুকানো কলামগুলির বৈশিষ্ট্য সহ)।
ওএমজি পনিস

"দেখে মনে হচ্ছে এমন হওয়া উচিত ..." কেন? আমি এই :) উপর শিক্ষার প্রয়োজন মধ্যে আছি
ডেভ

সুতরাং এটি পুরো টেবিলটিতে 2 টিরও বেশি নাল someFieldমান বা যদি না খালি ফলাফল সেট থাকে তবে এটি ফিরিয়ে আনবে ।
মার্টিন স্মিথ

@ ডেভ: আপনি যদি এমন অবস্থানে থাকতেন যেখানে আপনাকে নিয়মিত খারাপ ডেটা পরীক্ষা করা এবং সংশোধন করতে হত, আপনি কি পরিস্থিতিটি প্রথম স্থানে ফেলতে চান না? মাইএসকিউএল সূচক হিসাবে একটি অনন্য বাধা প্রয়োগ করে - আরও তথ্যের জন্য ক্রেডিট
ওএমজি পনিস

18
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3

4
এখানে একমাত্র সতর্কতা (কমপক্ষে 5.1.46-সম্প্রদায় মাইএসকিউএল কমিউনিটি সার্ভারে (জিপিএল)) হ'ল "প্রতিটি উত্সযুক্ত টেবিলের অবশ্যই নিজের নিজস্ব নাম থাকতে হবে", এটি আপনাকে বর্গক্ষেত্রের মতো দেখাবে: নির্বাচন করুন ব্যবহারকারীর নাম, অজ্ঞান থেকে (ব্যবহারকারী নাম নির্বাচন করুন, আমার ব্যবহারকারীর নাম গ্রাহকদের কাছ থেকে নাম হিসাবে গণনা (ব্যবহারকারীর নাম) যেখানে আমার অসাধারণ> 3
ডি_ কে


14

আপনি স্ব-যোগদানের মাধ্যমে এটিও করতে পারেন:

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk


1

ওএমজি পনিস যেমন বলেছিলেন, ক্লজ থাকার বিষয়টি আপনার পরে কী is তবে, আপনি যদি আশা করছিলেন যে আপনি সংক্ষিপ্তসারের পরিবর্তে পৃথক সারি পেয়ে যাবেন ("থাকার সাথে একটি সংক্ষিপ্তসার তৈরি হয়) - এটি একটি বিবৃতিতে করা যায় না। সেক্ষেত্রে আপনাকে অবশ্যই দুটি বিবৃতি ব্যবহার করতে হবে।


4
পুরোপুরি সত্য নয় - হ্যাভিং কী ব্যবহার করছে তা ম্যানিপুলেট করতে গ্রুপ বাই ব্যবহার করুন।
ওএমজি পনিস

1

আমি গ্রুপ বায়ুতে একটি উদাহরণ দিই যার মধ্যে দুটি সারণীতে:

Select cn.name,ct.name,count(ct.id) totalcity from city ct left join country cn on ct.countryid = cn.id Group By cn.name,ct.name Having totalcity > 2



1

আমার জন্য, খালি ফলাফল না দিয়ে একটি দল না থাকা। সুতরাং আমি অনুমান একটি বিবরণ থাকার জন্য একটি গ্রুপ থাকার খুব গুরুত্বপূর্ণ


-2

"Pk" একটি মূল ক্ষেত্র হওয়া উচিত বলেও উল্লেখ করা উচিত। স্ব-যোগদান

SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk 

বিল কারভিন দ্বারা আপনাকে সমস্ত রেকর্ড প্রদান করে যা সদৃশ যা আমি চেয়েছিলাম। কারও কারও দু'জনের বেশি রয়েছে বলে আপনি একই রেকর্ডটি একাধিকবার পেতে পারেন। কী ফিল্ডস দমন দ্বারা একই রেকর্ড থেকে পরিত্রাণ পেতে আমি একই ক্ষেত্রগুলি সহ অন্য একটি টেবিলে সমস্ত লিখেছি। আমি চেষ্টা করেছিলাম

SELECT * FROM db.table HAVING COUNT(someField) > 1

প্রথম উপরে। এটি থেকে ফিরে আসা ডেটা কেবল নকলগুলির মধ্যে একটি দেয়, এটি আপনাকে যা দেয় তার 1/2 এর চেয়ে কম তবে আপনি যদি চান তবে গণনাটি ভাল is


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