একাধিক সারণী থেকে গণনা (*) নির্বাচন করুন


229

আমি ফলস্বরূপ count(*)দুটি পৃথক টেবিল (তাদের কল করুন tab1এবং tab2) থেকে কীভাবে নির্বাচন করতে পারি :

Count_1   Count_2
123       456

আমি এটি চেষ্টা করেছি:

select count(*) Count_1 from schema.tab1 union all select count(*) Count_2 from schema.tab2

তবে আমার যা কিছু আছে তা হ'ল:

Count_1
123
456

উত্তর:


327
SELECT  (
        SELECT COUNT(*)
        FROM   tab1
        ) AS count1,
        (
        SELECT COUNT(*)
        FROM   tab2
        ) AS count2
FROM    dual

14
তোমার দ্বৈত দরকার কেন? ওটার মানে কি?
রে লু

31
এটি একটি রেকর্ড সহ একটি জাল টেবিল। ওরাকলে আপনার FROM ব্যতীত SELECT থাকতে পারে না।
কাসসনোই

3
ডুয়াল ওরাকল ডিবি'র একটি টেবিল যেখানে সমস্ত অ্যাকাউন্টগুলি অ্যাক্সেস করতে পারে আপনি সাধারণ প্রয়োজনের জন্য এটি ব্যবহার করতে পারেন যেমন: "দ্বৈত থেকে সিসডেট নির্বাচন করুন"
ড্যান্সার্ম

5
এটি কোনও পার্থক্য করে না, ওরাকল COUNT (*) এর ভিতরে কোনও কিছুর মূল্যায়ন করবে না।
কাসনসুই

4
@ স্টাফেন: পোস্টগ্র্রেএসকিউএল-এ আপনি যখন ওরাকল কোডটি চেষ্টা করেন তখন এটি ঘটে। হারান FROM dual
কাসনসুই

81

অতিরিক্ত তথ্য হিসাবে, এসকিউএল সার্ভারে একই জিনিসটি সম্পাদন করার জন্য, আপনাকে কেবল ক্যোয়ারির "FROM দ্বৈত" অংশটি সরিয়ে ফেলতে হবে।


1
আমি বলতে প্রস্তুত ছিলাম "তবে এমএস এসকিউএল সম্পর্কে কী হবে, যখন আমি আপনার মন্তব্যটি দেখেছি need প্রয়োজনটি অনুমান করার জন্য আপনাকে ধন্যবাদ!
অ্যান্ড্রু নিলি

40

এটি কিছুটা আলাদা কারণ:

SELECT 'table_1' AS table_name, COUNT(*) FROM table_1
UNION
SELECT 'table_2' AS table_name, COUNT(*) FROM table_2
UNION
SELECT 'table_3' AS table_name, COUNT(*) FROM table_3

এটি উত্তর স্থানান্তরিত করে (এক কলামের পরিবর্তে টেবিলের জন্য এক সারি) দেয়, অন্যথায় আমি এটি অনেক আলাদা বলে মনে করি না। আমি মনে করি পারফরম্যান্স অনুযায়ী তাদের সমতুল্য হওয়া উচিত।


1
আপনি এখানে ইউনিয়ন সব ভাল রাখবেন।
কাসনসুই

তিনটি একক সারির প্রশ্নগুলির সাথে "সমস্ত" যুক্ত করতে পার্থক্য কী? ফলাফলগুলি অবশ্যই একইভাবে হওয়া উচিত, অবশ্যই?
মাইক উডহাউস

1
সমস্ত গ্রুপ ছাড়া ইউনিয়ন ফলাফল দেয় না। যদি টেবিল_1 এবং টেবিল 2 এ 2 টি সারি এবং টেবিল_3 এ 3 সারি থাকে, আপনি আপনার ফলাফলসেটে দুটি সারি পেয়ে যাবেন, এবং টেবিল 2 এর কতগুলি সারি রয়েছে ফলাফল ফলাফল থেকে তা বলতে সক্ষম হবেন না: 2 বা 3.
কাসনোই

4
হ্যাঁ, তবে আমি টেবিলের নামটি নির্বাচন করি, যা ফলাফলকে অনন্য করে তোলে। অন্যথায় আপনি সঠিক হতে চাইবেন, তবে প্রসঙ্গ ছাড়াই বেশ কয়েকটি সংখ্যায় কী মান থাকবে? ;-)
মাইক উডহাউস

এটি প্রতিটি গণনার জন্য সিটিই (উইথ সিলেক্ট) স্টেটমেন্ট ব্যবহার করার একটি ভাল উপায়।
নীল_চীপ

28

আমার অভিজ্ঞতা এসকিউএল সার্ভারের সাথে রয়েছে তবে আপনি এটি করতে পারেন:

select (select count(*) from table1) as count1,
  (select count(*) from table2) as count2

এসকিউএল সার্ভারে আমি ফলাফল পেয়েছি আপনি পরে।


11

অন্যান্য সামান্য বিভিন্ন পদ্ধতি:

with t1_count as (select count(*) c1 from t1),
     t2_count as (select count(*) c2 from t2)
select c1,
       c2
from   t1_count,
       t2_count
/

select c1,
       c2
from   (select count(*) c1 from t1) t1_count,
       (select count(*) c2 from t2) t2_count
/

7

আমি দেখতে পাচ্ছি না যে কোনও উত্তর উত্তর এনেছে bring

যদি আপনি উপ-প্রশ্নের পছন্দ না এবং প্রতিটি টেবিলের আপনি এটা করতে পারেন প্রাথমিক কী আছে:

select count(distinct tab1.id) as count_t1,
       count(distinct tab2.id) as count_t2
    from tab1, tab2

তবে পারফরম্যান্স অনুযায়ী আমি বিশ্বাস করি যে কাসনোইয়ের সমাধান আরও ভাল, এবং আমি এটি ব্যবহার করব।



7

শেয়ার করার জন্য আমার কাছ থেকে এখানে

বিকল্প 1 - বিভিন্ন টেবিল থেকে একই ডোমেন থেকে গণনা

select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain1.table2) "count2" 
from domain1.table1, domain1.table2;

বিকল্প 2 - একই টেবিলের জন্য বিভিন্ন ডোমেন থেকে গণনা

select distinct(select count(*) from domain1.table1) "count1", (select count(*) from domain2.table1) "count2" 
from domain1.table1, domain2.table1;

বিকল্প 3 - একই সারণির জন্য পৃথক ডোমেন থেকে গণনা সারি করার জন্য "ইউনিয়ন সমস্ত" দিয়ে

select 'domain 1'"domain", count(*) 
from domain1.table1 
union all 
select 'domain 2', count(*) 
from domain2.table1;

এসকিউএল উপভোগ করুন, আমি সবসময় করি :)




6

একটি দ্রুত ছুরিকাঘাত আসে:

Select (select count(*) from Table1) as Count1, (select count(*) from Table2) as Count2

দ্রষ্টব্য: আমি এটি এসকিউএল সার্ভারে পরীক্ষা করেছি, সুতরাং From Dualএটি প্রয়োজনীয় নয় (অতএব বৈষম্য)।


5

কিছুটা সম্পূর্ণতার জন্য - এই কোয়েরি আপনাকে প্রদত্ত মালিকের জন্য সমস্ত টেবিলের একটি গণনা দেওয়ার জন্য একটি কোয়েরি তৈরি করবে।

select 
  DECODE(rownum, 1, '', ' UNION ALL ') || 
  'SELECT ''' || table_name || ''' AS TABLE_NAME, COUNT(*) ' ||
  ' FROM ' || table_name  as query_string 
 from all_tables 
where owner = :owner;

আউটপুট যেমন কিছু

SELECT 'TAB1' AS TABLE_NAME, COUNT(*) FROM TAB1
 UNION ALL SELECT 'TAB2' AS TABLE_NAME, COUNT(*) FROM TAB2
 UNION ALL SELECT 'TAB3' AS TABLE_NAME, COUNT(*) FROM TAB3
 UNION ALL SELECT 'TAB4' AS TABLE_NAME, COUNT(*) FROM TAB4

যার পরে আপনি আপনার গণনা পেতে চালাতে পারেন। প্রায়শই মাঝে মাঝে এটি কেবল একটি সহজ স্ক্রিপ্ট।


4

যদি টেবিলগুলি (বা কমপক্ষে একটি মূল কলাম) একই ধরণের হয় তবে কেবল ইউনিয়নটি প্রথমে তৈরি করুন এবং তারপরে গণনা করুন।

select count(*) 
  from (select tab1key as key from schema.tab1 
        union all 
        select tab2key as key from schema.tab2
       )

অথবা আপনার স্টেটমেন্ট নিন এবং এটির চারপাশে আরও একটি যোগফল যোগ করুন।

select sum(amount) from
(
select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2
)

3
--============= FIRST WAY (Shows as Multiple Row) ===============
SELECT 'tblProducts' [TableName], COUNT(P.Id) [RowCount] FROM tblProducts P
UNION ALL
SELECT 'tblProductSales' [TableName], COUNT(S.Id) [RowCount] FROM tblProductSales S


--============== SECOND WAY (Shows in a Single Row) =============
SELECT  
(SELECT COUNT(Id) FROM   tblProducts) AS ProductCount,
(SELECT COUNT(Id) FROM   tblProductSales) AS SalesCount


0

বিভিন্ন টেবিলের সাথে যোগ দিন

SELECT COUNT(*) FROM (  
SELECT DISTINCT table_a.ID  FROM table_a JOIN table_c ON table_a.ID  = table_c.ID   );

0

ট্যাব 1 থেকে field'মান' এর মতো নির্বাচন করুন (নির্বাচন করুন গণনা ) + ( ট্যাব 2 থেকে গণনা নির্বাচন করুন যেখানে field'মান' পছন্দ করুন)


-2
select @count = sum(data) from
(
select count(*)  as data from #tempregion
union 
select count(*)  as data from #tempmetro
union
select count(*)  as data from #tempcity
union
select count(*)  as data from #tempzips
) a

স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম এবং পোস্ট করার জন্য ধন্যবাদ। কীভাবে উত্তর দেবেন দয়া করে একবার দেখুন ।
সার্জ বেলভ

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