2016-05-20 2 views
1

У меня есть эта таблица (модель. - не таблица в SQL, все ключи присоединяются к реальной таблицы, но мне нужно рассчитывать ключи, которые существуют в этой модели)подсчет значений disinstict multiplie цв

key1 key2 key 3 
v1  d1 t1 
v2  d2 t1 
v3  d1 t4 
v1  d3 t8 
v1  d2 t4 

результат должен возвращать

key1 v1 3 
key1 v2 1 
key1 v3 1 
key2 d1 2 

скрипку для испытания http://sqlfiddle.com/#!9/c102f

Я не могу выбрать все ключи один за другим, потому что количество ключей = 79 и строка Num = 1 115 260

один за другим выбрать процесс занимает 2 минуты

ответ

1

Вы не можете GroupBy отдельных колонок в одном операторе выбора в качестве первой группы будет влиять на 2-е и т.д.

Там нет другого пути, кроме выбора их по одному, но , если вы просто хотите, чтобы получить все в один результат, вы можете использовать союз

(select 'key1' AS column_origin, key1, count(key1) from TestTable group by key1) 
union all 
(select 'key2', key2, count(key2) from TestTable group by key2) 
union all 
(select 'key3', key3, count(key3) from TestTable group by key3); 
+0

если я использую union, я не вижу, какой ключ был подсчитан. Эти значения и ключи - параметры для фильтра, и мне нужны элементы счетчика в результате для каждой опции – Gelid

+0

@Gelid Там я исправил ее. @mimzee Используйте 'union all', когда результаты будут различны, или вы не хотите, чтобы неявные' '' '' '' '' 'фильтруют результаты. По соображениям производительности ... – fancyPants

+0

спасибо! работа прекрасна! – Gelid