2016-03-14 3 views
1

У меня есть таблица с несколькими столбцами в ней. Я хотел бы написать запрос, который итерации через каждую строку и найти общее количество всех строк, которые соответствуют столбцу в выбранной строке, а также найти количество всех строк, которые соответствуют 2 столбцам. С этими двумя значениями я хотел бы найти процентную разницу и напечатать их как column1, percent (query1 (column2)/query2 (column2 и column3)).Запрос, чтобы найти процентное различие каждой строки в sql-сервере

Ниже приведен запрос, который я написал

SELECT DISTINCT (t2.column1) 
    ,(
     SELECT count(DISTINCT column2) 
     FROM table1 t1 
     WHERE t1.column1 = t2.column1 
     ORDER BY column2 
     ) AS total_count 
    ,(
     SELECT count(DISTINCT column2) 
     FROM table1 t1 
     WHERE t1.column1 = t2.column1 
      AND column3 IN (
       10 
       ,20 
       ) 
     ORDER BY column1 
      ,column2 
      ,column3 
     ) AS column3_count 
FROM table1 t2; 

Вышеприведенные работы запроса, но занимает много времени, чтобы обработать.

Я хочу, чтобы он, как

SELECT DISTINCT (column1) 
    ,percentage(query1 that matches ALL rows WITH column1/query2 that match ALL rows WITH column1 
     AND SOME other CONSTRAINT) 
FROM TABLE t1 

Я хотел бы оптимизировать выше запрос тоже. Пожалуйста, дайте мне знать

Благодаря

ответ

0

Я думаю, что вы просто хотите условную агрегацию. Для подсчетов:

select t1.column1, 
     count(distinct column2) as num_column2, 
     count(distinct case when column3 in (10, 20) then column2 end) as num_column2_column3 
from table1 t1 
group by t1.column1; 

Я не понимаю, расчет за процент, но это, казалось бы, на основе этих чисел.

0
select t1.column1, 
     count(distinct column2) as num_column2, 
     count(distinct case when column3 in (10, 20) then column2 end) as num_column2_column3 
from table1 t1 
group by t1.column1;