Я хочу подсчитать как общее количество записей в таблице, так и общее количество записей, соответствующих определенным условиям. Я могу сделать это с двумя отдельными запросами:два запроса SQL COUNT()?
SELECT COUNT(*) AS TotalCount FROM MyTable;
SELECT COUNT(*) AS QualifiedCount FROM MyTable
{possible JOIN(s) as well e.g. JOIN MyOtherTable mot ON MyTable.id=mot.id}
WHERE {conditions};
Есть ли способ, чтобы объединить их в один запрос, так что я получаю два поля в одной строке?
SELECT {something} AS TotalCount,
{something else} AS QualifiedCount
FROM MyTable {possible JOIN(s)} WHERE {some conditions}
Если нет, то я могу выпустить два запроса и завернуть их в сделке, чтобы они последовательны, но я надеялся сделать это с одним.
Редактировать: меня больше всего интересует атомарность; если требуются два оператора SUB SELECT, то это нормально, если есть INSERT, исходящий откуда-то, он не делает эти два ответа непоследовательными.
Редактировать 2: Ответы CASE полезны, но в моем конкретном случае условия могут включать JOIN с другой таблицей (забыл упомянуть, что в моем исходном сообщении, извините), поэтому я предполагаю, что этот подход не будет работать ,
Какую базу данных вы используете? – Andomar
MySQL, но я хотел бы знать это в целом, если это довольно просто. –
Связанное, но не решение: вы также можете использовать для подсчета больших таблиц. SELECT SQL_CALC_FOUND_ROWSFROM MyTable; SELECT FOUND_ROWS(); SELECT SQL_CALC_FOUND_ROWSFROM MyTable WHERE {conditions}; SELECT FOUND_ROWS(); –