Вы не говорите СУБД.В случае SQL Server вы можете использовать UNPIVOT
, чтобы избежать сканирования таблицы дважды.
SELECT car, COUNT(*)
FROM YourTable
UNPIVOT (car FOR col in (ColumnA, ColumnB)) u
GROUP BY car
В зависимости от имеющихся у вас индексов это может быть более или менее эффективным, чем подход UNION ALL
(Если оба ColumnA
и ColumnB
были проиндексированы, план запроса UNION ALL
мог бы выполнить объединение слиянием по двум индексам и передать их в оператор агрегирования, избегая необходимости сортировать данные, которые потребуются для плана UNPIVOT
)