два КОЛИЧЕСТВА SQL () запросы?

Не уверен, что причина этой ошибки, но вы можете попробовать использовать Squid или Varnish для достижения этой цели. Ранее я использовал Squid для прокси защищенного экземпляра Windows IIS без проблем.

9
задан Jason S 20 May 2009 в 16:04
поделиться

4 ответа

Один из способов - объединить таблицу против самой себя:

select
   count(*) as TotalCount,
   count(s.id) as QualifiedCount
from
   MyTable a
left join
   MyTable s on s.id = a.id and {some conditions}

Другой способ - использовать подзапросы:

select
   (select count(*) from Mytable) as TotalCount,
   (select count(*) from Mytable where {some conditions}) as QualifiedCount

Или вы можете поместить условия в случай:

select
   count(*) as TotalCount,
   sum(case when {some conditions} then 1 else 0 end) as QualifiedCount
from
   MyTable

Связанный:

SQL Объединение нескольких результатов SELECT

22
ответ дан 4 December 2019 в 06:03
поделиться

В Sql Server или MySQL вы можете сделать это с помощью оператора CASE:

select 
    count(*) as TotalCount,
    sum(case when {conditions} then 1 else 0 end) as QualifiedCount
from MyTable

Изменить: это также работает, если вы используете JOIN в условии:

select 
    count(*) as TotalCount,
    sum(case when {conditions} then 1 else 0 end) as QualifiedCount
from MyTable t
left join MyChair c on c.TableId = t.Id
group by t.id, t.[othercolums]

GROUP BY есть чтобы в основной таблице была найдена только одна строка.

20
ответ дан 4 December 2019 в 06:03
поделиться

MySQL не считает NULL, так что это тоже должно работать:

SELECT count(*) AS TotalCount, 
  count( if( field = value, field, null)) AS QualifiedCount 
  FROM MyTable {possible JOIN(s)} WHERE {some conditions}

Это хорошо работает, если поле QuailifiedCount поступает из LEFT JOIN, и вас заботит только то, существует ли оно. Чтобы получить количество пользователей и количество пользователей, которые заполнили свой адрес:

SELECT count( user.id) as NumUsers, count( address.id) as NumAddresses
  FROM Users
  LEFT JOIN Address on User.address_id = Address.id;
0
ответ дан 4 December 2019 в 06:03
поделиться

если вы просто подсчитываете строки, вы можете просто использовать вложенные запросы.

select 
    (SELECT COUNT(*) AS TotalCount FROM MyTable) as a,
    (SELECT COUNT(*) AS QualifiedCount FROM MyTable WHERE {conditions}) as b
7
ответ дан 4 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: