سؤال

كيف يمكنني الاختيار 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
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

وكمعلومات إضافية، لتحقيق نفس الشيء في SQL Server، تحتاج فقط إلى إزالة "FROM المزدوج" جزء من الاستعلام.

وفقط لأنه مختلف قليلا:

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

وانه يعطي إجابات نقلها (صف واحد في الجدول بدلا من عمود واحد)، وإلا أنا لا أعتقد أنه يختلف كثيرا. وأعتقد أن الأداء الحكمة ينبغي أن يكون معادلا.

وتجربتي هي مع SQL Server ولكن هل يمكن أن تفعل:

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

في SQL خادم أحصل على نتيجة كنت بعد.

وطرق أخرى مختلفة قليلا:

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
/

لأنني لا أستطيع رؤية أي إجابة أخرى تثير هذا الأمر.

لو أنت لا تحب الاستعلامات الفرعية و لديك مفاتيح أساسية في كل جدول يمكنك القيام بذلك:

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

لكن من ناحية الأداء، أعتقد أن حل Quassnoi هو الأفضل، وهو الحل الذي سأستخدمه.

select (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;

وSELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) FROM dual;

هنا مني للمشاركة

الخيار 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;

استمتع بـ SQL، وأنا أفعل ذلك دائمًا :)

لشيء من الكمال - وهذا الاستعلام إنشاء استعلام لإعطائك عدد من كافة الجداول لمالك معين.

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

والتي يمكنك بعد ذلك تشغيل للحصول على التهم الخاصة بك. انها مجرد النصي في متناول اليد ليكون حولها في بعض الأحيان.

وجاءت طعنة سريعة مع:

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

ملحوظة: أنا جربت هذا في SQL Server بحيث From Dual ليس من الضروري (ومن هنا جاء التناقض)

.
    select 
    t1.Count_1,t2.Count_2
    from 
(SELECT count(1) as Count_1 FROM tab1) as t1, 
(SELECT count(1) as Count_2 FROM tab2) as t2

إذا الجداول (أو على الأقل عمود مفتاح) هي من نفس النوع فقط جعل الاتحاد أولا ثم عد.

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

وأو اتخاذ satement ووضع مبلغ آخر () حوله.

select sum(amount) from
(
select count(*) amount from schema.tab1 union all select count(*) amount from schema.tab2
)
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all

أو

SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
--============= 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

والانضمام مع جداول مختلفة

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

وحدد (حدد عدد (<م>) من tab1 حيث field مثل 'قيمة') + (اختيار عدد () من tab2 حيث field مثل 'قيمة') عد

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top