Вернуться к той же таблице

Есть ли способ объединить эти два запроса в один запрос - всего один поход к базе данных?

Оба запроса обращаются к одной и той же таблице, но первый ищет Total Active Circuits, а второй ищет Total Circuits.

Я надеюсь показать такие результаты... 15/4, 34/12, 21/2 (где первое число — ActiveCircuits, а второе — TotalCircuits)

SELECT COUNT(CircuitID) AS ActiveCircuits
FROM Circuit
WHERE StateID = 5
AND Active = 1

SELECT COUNT(CircuitID) AS TotalCircuits
FROM Circuit
WHERE StateID = 5

Каковы возможные значения для Active? Если это просто 0 или 1, то Sum( Active ) поможет. Рекомендуем к прочтению.

HABO 25.12.2020 15:50
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте условную агрегацию:

SELECT COUNT(*) AS TotalCircuits,
       SUM(CASE WHEN Active = 1 THEN 1 ELSE 0 END) as ActiveCircuits
FROM Circuit
WHERE StateID = 5;

Это предполагает, что CircuitId никогда не бывает NULL, что кажется вполне разумным в таблице под названием Circuit.

Любопытно, почему вы использовали SUM ... ELSE 0, другие варианты: отбросить ELSE и переключиться на COUNT. Я всегда использовал COUNT без ELSE, есть ли причина предпочесть одно другому?

Charlieface 28.12.2020 06:05

@Чарлифейс. . . Я думаю, что SUM(1) намного понятнее, чем COUNT(). Проблема в том, что COUNT(1) = COUNT(2)` кажется нелогичным.

Gordon Linoff 28.12.2020 12:49

Вы можете использовать случай, когда нужно иметь 1 везде, где он активен, а затем взять сумму, чтобы получить общее количество 1 или активных цепей.

SELECT COUNT(CIRCUITID) AS TOTALCIRCUITS,
SUM(CASE WHEN ACTIVE = 1 THEN 1 ELSE 0 END) AS ACTIVECIRCUITS
FROM CIRCUIT
WHERE STATEID = 5

Другие вопросы по теме