দল অনুসারে রেকর্ডের সংখ্যা গণনা করুন


138

আমি কীভাবে কোনও গোষ্ঠী দ্বারা ক্যারিয়ারে রেকর্ডের সংখ্যা গণনা করব,

যেমন:

select count(*) 
from temptable
group by column_1, column_2, column_3, column_4

আমাকে দেয়,

1
1
2

1 + 1 + 1 = 3 পেতে আমার উপরের রেকর্ডগুলি গণনা করতে হবে।


3
@ লরেনভিএস: তবে এটি আমাকে টেবিলে রেকর্ডের সংখ্যার একটি গণনা দেবে। গ্রুপটি হওয়ার পরে আমার অনেকগুলি রেকর্ড দরকার।
ক্রিস

3
গ্রুপ অনুসারে সারি সংখ্যা পরিবর্তন করে না। 1 + 1 + 2 (আপনার উদাহরণে) সারণীতে সারিগুলির সংখ্যা হবে। আপনি কি 3 খুঁজছেন? স্বতন্ত্র গ্রুপের সংখ্যা?
LorenVS

2
প্রশ্ন গঠনের আরেকটি উপায়: আমি কীভাবে প্রদত্ত প্রশ্নের জন্য আলাদা গ্রুপিং স্তরের সংখ্যা নির্বাচন করব?
জুলিয়ান

কোনও ব্যবহারকারী কেন প্রশ্ন জিজ্ঞাসা করে তা সর্বদা স্পষ্ট নয়, তবে আমি এখানে এসেছি কারণ আমি দেখার চেষ্টা করছি যে কোনও ভিউতে কোনও কলাম প্রার্থী প্রাথমিক কী বা সংমিশ্রণ কী কিনা testing "VIEWNAME থেকে গণনা (স্বতন্ত্র COLUMNNAME) নির্বাচন করুন" সময় শেষ হয়েছে, যেখানে আমি মোট পেতে পারি যদি গ্রুপ অনুসারে কাজ করে।
কেন ফোর্স্লুন্ড 5'19

উত্তর:


169

আপনি অন্য একটি COUNT- এ OVER ধারাটি ব্যবহার করে একটি ক্যোয়ারিতে উভয়ই করতে পারেন

select
    count(*) RecordsPerGroup,
    COUNT(*) OVER () AS TotalRecords
from temptable
group by column_1, column_2, column_3, column_4

আমি জানি এটি একটি এসকিউএল-সার্ভারের প্রশ্ন, তবে রেফারেন্সের জন্য: এটি ডিবি / 2-তে কাজ করে না (আমার ক্ষেত্রে আইবিএম আইসারিগুলিতে)। Thomas's উত্তর আমার মন্তব্য দেখুন
Bjinse

আমি কীভাবে সেই সংখ্যা গণনা করব?
ম্যাকডান গ্যারেট

1
এই সমাধানটির নীচের দিকটি হ'ল এটি আপনাকে একাধিকবার উত্তর দেয় (প্রতিটি সংমিশ্রনের জন্য column_1, column_2, column_3, column_4)। আপনি কীভাবে ফলাফলগুলি প্রসেস করেন তার উপর নির্ভর করে এটি একটি উল্লেখযোগ্য পার্শ্ব-প্রতিক্রিয়া হতে পারে এবং নাও হতে পারে।
কার্টবোরহর্স

3
কেবল রেকর্ডের সংখ্যা ফেরত পেতে, একটি শীর্ষ নির্বাচন (1) গণনা (*) ওভার () হিসাবে যুক্ত করুন ....
গিলহার্ম ক্যাম্পোস হাজান

2
আমার ক্ষেত্রে শীর্ষ (1) COUNT ( ) ওভার () ব্যবহারের ক্ষেত্রে কোয়েরিটির পারফরম্যান্স ছিল না। যেহেতু কেবলমাত্র গোষ্ঠীগুলির গণনা প্রয়োজন আমি এটিকে DISTINCT COUNT ( ) ওভার () এ পরিবর্তন করেছি এবং ক্যোয়ারীর কার্য সম্পাদন নাটকীয়ভাবে উন্নত হয়েছে।
জো অ্যালড্রিচ

71

সহজ সমাধানটি হ'ল একটি উত্পন্ন টেবিলটি ব্যবহার করা:

Select Count(*)
From    (
        Select ...
        From TempTable
        Group By column_1, column_2, column_3, column_4
        ) As Z

আর একটি সমাধান হ'ল একটি কাউন্ট ডিস্টিন্ট ব্যবহার করা:

Select ...
    , ( Select Count( Distinct column_1, column_2, column_3, column_4 )
        From TempTable ) As CountOfItems
From TempTable
Group By column_1, column_2, column_3, column_4

প্রথম উত্তরটি ডিবি / ২ তেও কাজ করে, তবে কোনও কারণে এটির জন্য এএস টিএমপি যোগ করার দরকার রয়েছে (ট্রাউটিনেটর যুক্ত করার মতো)
বিজিন্স

5
@ জিনজেস - কিছু ডিবিএমএসের প্রয়োজন হবে যে সমস্ত উত্পন্ন টেবিলের একটি উপাম থাকতে হবে। তারা সকলেই এটি গ্রহণ করবে তাই এটি অন্তর্ভুক্ত করতে ক্ষতি হবে না। আমি আমার উত্তরে এটি যুক্ত করব।
থমাস

25

আমি জানি এটি বরং দেরি হয়ে গেছে, তবে কেউই এটির পরামর্শ দেয়নি:

select count ( distinct column_1, column_2, column_3, column_4) 
from   temptable

এটি কমপক্ষে ওরাকলে কাজ করে - এটি পরীক্ষা করার জন্য আমার কাছে বর্তমানে অন্যান্য ডেটাবেস নেই এবং আমি টি-এসকিএল এবং মাইএসকিউএল সিনট্যাক্সের সাথে এতটা পরিচিত নই।

এছাড়াও, আমি পার্সারটিতে এটি আরও কার্যকর করার জন্য আরও দক্ষ কিনা বা সিলেক্ট স্টেটমেন্টের বাসা বেঁধে অন্যের সমাধান আরও ভাল কিনা তা আমি পুরোপুরি নিশ্চিত নই। তবে আমি এটিকে কোডিং দৃষ্টিকোণ থেকে আরও মার্জিত বলে মনে করি।


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

@ রেজওয়ানফ্লাভিয়াস পান্ডা 1. কেন? অন্যান্য সমাধান সম্পর্কে ভাল কি? নেস্টিং এসকিউএল আরও ভার্জোজ এবং আমার চোখে, আরও অগোছালো এবং বুঝতে আরও কঠিন (সমর্থন অর্থে চালিয়ে যাওয়া আরও শক্ত)। আমি পেয়েছি যে অন্য উপায়ে আপনার পছন্দ থাকতে পারে তবে এটি অন্য কারও পছন্দের চেয়ে এটি "সুপারিশ" করার কারণ নয়। থমাস অনুরূপ পরামর্শ দিয়েছেন, হ্যাঁ, তবে আবার তিনি এটিকে দেখে মনে করেন যেন এসকিউএলকে বাসা বাঁধাই সমাধানের প্রয়োজনীয় অংশ, যা তা নয়।
কার্টবফরহর্স

12

আমি সাবকিউরিটি ছাড়াই এটি অর্জনের চেষ্টা করছিলাম এবং নীচের হিসাবে প্রয়োজনীয় ফলাফল পেতে সক্ষম হয়েছি

SELECT DISTINCT COUNT(*) OVER () AS TotalRecords
FROM temptable
GROUP BY column_1, column_2, column_3, column_4


3

কেমন:

SELECT count(column_1)
FROM
    (SELECT * FROM temptable
    GROUP BY column_1, column_2, column_3, column_4) AS Records

1

আপনি করতে পারেন:

select sum(counts) total_records from (
    select count(*) as counts
    from temptable
    group by column_1, column_2, column_3, column_4
) as tmp

1

PostgreSQL এ এটি আমার জন্য কাজ করে:

select count(count.counts) 
from 
    (select count(*) as counts 
     from table 
     group by concept) as count;

1

আপনি কি নীচের নীচের কোডটি কার্যকর করতে পারেন? এটি ওরাকলে কাজ করেছিল।

SELECT COUNT(COUNT(*))
FROM temptable
GROUP BY column_1, column_2, column_3, column_4

1
এসকিএল-সার্ভারে একটি সামগ্রীর ভিতরে সমষ্টি চালানো যায় না।
এ গ্রিনস্মিথে

0

আপনি নীচের কোয়েরি দ্বারা পেতে পারেন

select column_group_by,count(*) as Coulm_name_to_be_displayed from Table group by Column;

-- For example:
select city,count(*) AS Count from people group by city


0

PrestoDb- র অনুসরণ , যেখানে ফার্স্টফিল্ডের একাধিক মান থাকতে পারে:

select *
            , concat(cast(cast((ThirdTable.Total_Records_in_Group * 100 / ThirdTable.Total_Records_in_baseTable) as DECIMAL(5,2)) as varchar), '%') PERCENTage
from 
(
    SELECT FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable, count(*) Total_Records_in_Group
    FROM BaseTable FirstTable
    JOIN (
            SELECT FK1, count(*) AS Total_Records_in_baseTable 
            FROM BaseTable
            GROUP BY FK1
        ) SecondTable
    ON FirstTable.FirstField = SecondTable.FK1
    GROUP BY FirstTable.FirstField, FirstTable.SecondField, SecondTable.Total_Records_in_baseTable
    ORDER BY FirstTable.FirstField, FirstTable.SecondField
) ThirdTable

-1

এসকিউএল সার্ভারে বিভাজক ক্রিয়াকলাপের মাধ্যমে একটি COUNT ওভার (পার্টিশন বাই {কলামটি বিভাগ দ্বারা) কীভাবে ব্যবহার করবেন?

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

SELECT
{columns you want} ,
COUNT(ItemID) OVER (PARTITION BY ItemID) as BandedItemCount ,
{more columns you want}... ,
FROM {MyTable}

আপনি যদি এই পদ্ধতির ব্যবহার করেন, তবে আপনি পুরো তালিকাটি ফিরিয়ে দিতে চান তা ধরে রেখে আপনি গ্রুপটি ছাড়তে পারেন - যেমন আপনি ব্যান্ডিং করতে পারেন যেখানে আপনাকে যে আইটেমগুলির ব্যান্ড করতে চলেছে তার পুরো গণনাটি জানতে হবে having ডেটা পুরো সেট, যেমন প্রতিবেদনের পরিষেবা) প্রদর্শন করতে।


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