এসকিউএল সার্ভার কোয়েরি - DISTINCT সহ COUNT (*) নির্বাচন করা হচ্ছে


431

এসকিউএল সার্ভার ২০০ 2005-এ আমার কাছে একটি টেবিল সেমি_ উত্পাদন রয়েছে যা উত্পাদনে দেওয়া সমস্ত কোডকে তালিকাবদ্ধ করে। সারণীতে একটি টিকিট সংখ্যা, প্রোগ্রাম_প্রকার, এবং প্রোগ্রাম_নাম এবং পুশ_নম্বার সহ কিছু অন্যান্য কলাম রয়েছে।

লক্ষ্য: প্রোগ্রামের ধরণ এবং ধাক্কা নম্বর দ্বারা সমস্ত DISTINCT প্রোগ্রামের নাম গণনা করুন

আমার এখন পর্যন্ত যা আছে তা হ'ল:

DECLARE @push_number INT;
SET @push_number = [HERE_ADD_NUMBER];

SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

এটি আমাকে সেখানেই পেয়ে যায়, তবে এটি সমস্ত প্রোগ্রামের নাম গণনা করছে, স্বতন্ত্র নয় (যা আমি এই ক্যোয়ারিতে এটি করার আশা করি না)। আমি অনুমান করি যে আমি কীভাবে এটি কেবলমাত্র পৃথক প্রোগ্রামের নামগুলি নির্বাচন না করে গণনা করতে পারি তা কেবল আমার মাথাটি গুটিয়ে রাখতে পারি না। অথবা অন্যকিছু.

উত্তর:


729

প্রোগ্রামের ধরণ এবং পুশ নম্বর অনুসারে সমস্ত DISTINCT প্রোগ্রামের নাম গণনা করুন

SELECT COUNT(DISTINCT program_name) AS Count,
  program_type AS [Type] 
FROM cm_production 
WHERE push_number=@push_number 
GROUP BY program_type

DISTINCT COUNT(*)প্রতিটি অনন্য গণনার জন্য একটি সারি প্রদান করবে। আপনি যা চান তা হ'ল COUNT(DISTINCT <expression>): একটি গোষ্ঠীর প্রতিটি সারির জন্য প্রকাশের মূল্যায়ন করে এবং অনন্য, নাল মানগুলির সংখ্যা প্রদান করে।


110

আমার প্রতিটি স্বতন্ত্র মানের সংখ্যার সংখ্যা পাওয়া দরকার। কলামে অঞ্চল সম্পর্কিত তথ্য রয়েছে। আমি যে সহজ এসকিউএল ক্যোয়ারীটি দিয়ে শেষ করেছি তা হ'ল:

SELECT Region, count(*)
FROM item
WHERE Region is not null
GROUP BY Region

যা আমাকে এমন একটি তালিকা দেবে, বলুন:

Region, count
Denmark, 4
Sweden, 1
USA, 10

আরে @ নেটসই 1964 একই ক্যোয়ারী ব্যবহৃত হয়েছে তবে আমি অঞ্চল, রাজ্য, গণনা চাই, এটা কি সম্ভব? দয়া করে আমাকে সহায়তা করুন

47

আপনাকে স্বতন্ত্র কলামগুলির জন্য একটি উত্পন্ন টেবিল তৈরি করতে হবে এবং তারপরে সেই টেবিল থেকে গণনাটি জিজ্ঞাসা করতে হবে:

SELECT COUNT(*) 
FROM (SELECT DISTINCT column1,column2
      FROM  tablename  
      WHERE condition ) as dt

এখানে dtএকটি উত্পন্ন টেবিল।


1
ধন্যবাদ! আমি প্রচুর ডাটাবেস জুড়ে আমার জীবনে প্রচুর এসকিউএল ব্যবহার করেছি এবং এই প্রথম "এক্স হিসাবে" টেম্পল টেবিলে যোগ্যতা অর্জন করতে হয়েছিল।
মিমি

6
নোট করুন যে এখানে "ডিটি" এর জন্য সাধারণ পরিভাষা টেবিল থেকে প্রাপ্ত , টেম্প টেবিল নয়
8:44


15

এটা চেষ্টা কর:

SELECT
    COUNT(program_name) AS [Count],program_type AS [Type]
    FROM (SELECT DISTINCT program_name,program_type
              FROM cm_production 
              WHERE push_number=@push_number
         ) dt
    GROUP BY program_type

-1

এটি একটি দুর্দান্ত উদাহরণ যেখানে আপনি পিনকোডের গণনা পেতে চান যা ঠিকানা ক্ষেত্রের সর্বশেষে সঞ্চিত ছিল

SELECT DISTINCT
    RIGHT (address, 6),
    count(*) AS count
FROM
    datafile
WHERE
    address IS NOT NULL
GROUP BY
    RIGHT (address, 6)

-6
select  count (distinct NumTar),'PROPIAS'
from ATM_TRANe with (nolock)
where Fecha>='2014-01-01'
  AND Fecha<='2015-05-31'and NetDestino=0
  and SystemCodResp=0
group by NetDestino 
union 
select sum (contar),'FORANEAS'
from  
(
  select  count(distinct NumTar) as contar
  from ATM_TRANe with (nolock)
  where Fecha>='2014-01-01'
    AND Fecha<='2014-01-31'
    and NetDestino!=0
    and SystemCodResp=0
  group by NetDestino
)dt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.