CONDITIONS সহ COUNT টি DISTINCT


109

আমি একটি নির্দিষ্ট শর্ত সাপেক্ষে একটি কলামে স্বতন্ত্র আইটেমের সংখ্যা গণনা করতে চাই, উদাহরণস্বরূপ যদি টেবিলটি এর মতো হয়:

tag | entryID
----+---------
foo | 0
foo | 0
bar | 3

যদি আমি "ট্যাগ গণনা" হিসাবে স্বতন্ত্র ট্যাগগুলির সংখ্যা গণনা করতে এবং একই টেবিলের মধ্যে "আইডি>> পজিটিভ ট্যাগ গণনা" হিসাবে আইডি> 0 সহ স্বতন্ত্র ট্যাগগুলির সংখ্যা গণনা করতে চাই তবে আমার কী করা উচিত?

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

উত্তর:


266

আপনি এটি চেষ্টা করতে পারেন:

select
  count(distinct tag) as tag_count,
  count(distinct (case when entryId > 0 then tag end)) as positive_tag_count
from
  your_table_name;

প্রথমটি count(distinct...)সহজ। দ্বিতীয়টি, কিছুটা জটিল দেখায়, আপনি আসলে case...whenধারাটি বাদে প্রথমটির মতোই হ'ল । ইন case...whenদফা, আপনি শুধুমাত্র ইতিবাচক মানগুলি ফিল্টার। শূন্য বা নেতিবাচক মানগুলি হিসাবে মূল্যায়ন করা nullহবে এবং গণনায় অন্তর্ভুক্ত হবে না।

এখানে একটি বিষয় লক্ষণীয় হ'ল একবার এই টেবিলটি পড়ে এটি করা যেতে পারে। যখন মনে হয় আপনাকে একই টেবিলটি দু'বার বা তার বেশি পড়তে হবে, এটি আসলে বেশিরভাগ সময় একবার পাঠ করে করা যায়। ফলস্বরূপ, এটি কম আই / ও দিয়ে কাজটি আরও দ্রুত শেষ করবে।


4
তবে কি ইতিবাচক_ট্যাগ_কাউন্টটিও আলাদা হবে?
derekhh

সম্পাদিত ক্যোয়ারী এখনও সমস্যার সমাধান করে না - এটি কি এখন স্বতন্ত্র এন্ট্রি সম্পর্কিত স্বতন্ত্র ট্যাগের পরিবর্তে মূল্যবোধে কাজ করে না?
ব্রায়ানসি

এটি সত্যই চালাক একাকীকরণ।
লুক

আমার স্বতন্ত্র একাধিক কলাম রয়েছে (উদাহরণ গণনা (স্বতন্ত্র ট্যাগ, তারিখ))। তত্কালীন ধারাটিতে একাধিক কলাম থাকার উপায় আছে কি? আমি যদি কেবল একটি ট্যাগ করি তবে তারিখটি একটি পার্স ব্যতিক্রম ছোঁড়ে
ক্রুসেডারপিরো

@ ক্রাসাডেরপিরো এটি মূল প্রশ্নের ক্ষেত্রের বাইরে। আমি এটির জন্য একটি নতুন প্রশ্ন তৈরি করব।
ntalbs

2

নিম্নলিখিত বিবৃতি চেষ্টা করুন:

select  distinct A.[Tag],
     count(A.[Tag]) as TAG_COUNT,
     (SELECT count(*) FROM [TagTbl] AS B WHERE A.[Tag]=B.[Tag] AND B.[ID]>0)
     from [TagTbl] AS A GROUP BY A.[Tag]

প্রথম ক্ষেত্রটি ট্যাগ হবে দ্বিতীয়টি সম্পূর্ণ গণনা হবে তৃতীয়টি ইতিবাচকগুলি গণনা হবে।


1

এটি কাজ করতে পারে:

SELECT Count(tag) AS 'Tag Count'
FROM Table
GROUP BY tag

এবং

SELECT Count(tag) AS 'Negative Tag Count'
FROM Table
WHERE entryID > 0
GROUP BY tag

0

এটি কাজ করতে পারে:

SELECT 
    COUNT(DISTINCT T.tag) as DistinctTag,
    COUNT(DISTINCT T2.tag) as DistinctPositiveTag
FROM Table T
    LEFT JOIN Table T2 ON T.tag = T2.tag AND T.entryID = T2.entryID AND T2.entryID > 0

আপনার কেবলমাত্র 0 এন্ট্রিআইডি রয়েছে এমন কোনও আইটেম প্রথম ডিস্টিন্টে সঠিকভাবে গণনা করা উচিত তা নিশ্চিত করার জন্য যেখানে বাম অংশে প্রবেশের পরিবর্তে আপনার প্রবেশের শর্তটি দরকার।


4
এই কোয়েরিটি টেবিলটি দু'বার পড়ে। এটি একবারে টেবিলটি পড়েই করা যায়।
ntalbs

0

কোড যখন ট্যাগ এবং এন্ট্রি আইডি এর অনন্য / স্বতন্ত্র সমন্বয় গণনা করে থাকে [[এন্ট্রি আইডি]> ০

select count(distinct(concat(tag,entryId)))
from customers
where id>0

আউটপুটে এটি অনন্য মানের গণনা প্রদর্শন করবে আশা করি এটি সহায়তা করে

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