Выберите количество (*) из нескольких таблиц
Как я могу выбрать 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
22 ответа
SELECT (
SELECT COUNT(*)
FROM tab1
) AS count1,
(
SELECT COUNT(*)
FROM tab2
) AS count2
FROM dual
В качестве дополнительной информации, чтобы выполнить то же самое в SQL Server, вам просто нужно удалить "FROM dual" часть запроса.
Просто потому, что это немного отличается
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 Server я получаю результат, который вам нужен.
Другие немного другие методы:
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
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 (select count(*) from Table1) as Count1, (select count(*) from Table2) as Count2
Примечание: я проверил это в SQL Server, поэтому From Dual
не обязательно (отсюда и расхождение).
Для некоторой полноты - этот запрос создаст запрос, чтобы подсчитать все таблицы для данного владельца.
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
Который вы можете запустить, чтобы получить ваши счета. Это просто удобный сценарий, чтобы иногда его иметь.
Вот от меня поделиться
Вариант 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 count(distinct tab1.id) as count_t1,
count(distinct tab2.id) as count_t2
from tab1, tab2
Но с точки зрения производительности я считаю, что решение Quassnoi лучше, и то, которое я бы использовал.
SELECT (SELECT COUNT(*) FROM table1) + (SELECT COUNT(*) FROM table2) FROM dual;
--============= 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 (select count(*) from tab1) count_1, (select count(*) from tab2) count_2 from dual;
Если таблицы (или, по крайней мере, ключевой столбец) одного и того же типа, сначала создайте объединение, а затем подсчитайте.
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
)
Declare @all int
SET @all = (select COUNT(*) from tab1) + (select count(*) from tab2)
Print @all
или же
SELECT (select COUNT(*) from tab1) + (select count(*) from tab2)
Если вы используете Google BigQuery, это сработает.
SELECT
date,
SUM(Table_1_Id_Count) AS Table_1_Id_Count,
SUM(Table_2_Id_Count) AS Table_2_Id_Count
FROM
(
SELECT
Id AS Table_1_Id,
date,
COUNT(Id) AS Table_1_Id_Count,
0 AS Table_2_Id_Count
FROM
`your_project_name.Table_1`
GROUP BY
Id,
date
UNION ALL
SELECT
Id AS Table_2_Id,
date,
0 AS Table_1_Id_Count,
COUNT(Id) AS Table_2_Id_Count
FROM
`your_project_name.Table_2`
GROUP BY
Id,
date
)
GROUP BY
date
ПРИСОЕДИНЯЙТЕСЬ с разными таблицами
SELECT COUNT(*) FROM (
SELECT DISTINCT table_a.ID FROM table_a JOIN table_c ON table_a.ID = table_c.ID );
SELECT (
SELECT COUNT(*)
FROM tbl1
)
+
(
SELECT COUNT(*)
FROM tbl2
)
as TotalCount
Вам нужны подзапросы:
Select t1.key, t1.col, t2.col,
, (Select count(*)
From table3
Where key = t1.key) as Count1
, (Select count(*)
From table4
Where key = t1.key) as Count2
From table1 t1
Join table2 t2 on t2.key = t1.key
Where t1.key in (1,2,3)
Выберите (выберите count () из tab1 где field
как 'value') +
(выберите count () из tab2, где field
как 'значение') считать
Считайте строки из двух таблиц
SELECT (SELECT COUNT(*) FROM table1 ) +
(SELECT COUNT(*) FROM table2 )
AS total FROM dual;
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