Не уверен, что причина этой ошибки, но вы можете попробовать использовать Squid или Varnish для достижения этой цели. Ранее я использовал Squid для прокси защищенного экземпляра Windows IIS без проблем.
Один из способов - объединить таблицу против самой себя:
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 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 есть чтобы в основной таблице была найдена только одна строка.
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;
если вы просто подсчитываете строки, вы можете просто использовать вложенные запросы.
select
(SELECT COUNT(*) AS TotalCount FROM MyTable) as a,
(SELECT COUNT(*) AS QualifiedCount FROM MyTable WHERE {conditions}) as b