Я пытаюсь повторить тот же запрос с другими параметрами. Я могу написать это с помощью нескольких операторов объединения, но надеюсь, что есть способ написать функцию для более чистого кода. Спасибо!
Запрос, который мне нужно повторить:
SELECT
'marker_1' AS marker,
b.marker_1 AS results,
COUNT(DISTINCT b.key_id) AS number_of_results,
COUNT(DISTINCT b.key_id) * 100 / SUM(COUNT(DISTINCT b.key_id))
OVER () AS percentage
FROM main_table a
JOIN main_table_marker_results b ON b.key_id = a.id
WHERE a.is_marker = 'true'
GROUP BY marker, marker_1
UNION
SELECT
'marker_xyz' AS marker,
b.marker_xyz AS results,
COUNT(DISTINCT b.key_id) AS number_of_results,
COUNT(DISTINCT b.key_id) * 100 / SUM(COUNT(DISTINCT b.key_id))
OVER () AS percentage
FROM main_table a
JOIN main_table_marker_results b ON b.key_id = a.id
WHERE a.is_marker_xyz = 'true'
GROUP BY marker, marker_xyz
Мне нужно сделать это примерно для 20 разных маркеров. Кто-нибудь знает способ l oop этот запрос с разными параметрами? Переменные, которые могут измениться, - это маркер и результаты. Есть 20 разных маркеров, все с разными именами (обозначены в этом запросе «marker_1»), которые имеют свой собственный столбец. В столбце содержится результат для этого маркера, поэтому "результат" этого запроса может быть {положительным, отрицательным, неопределенным}.
Окончательный результат должен выглядеть так:
marker result number_of_results percentage
marker_1 positive 350 49.5
marker_1 negative 48 6.8
marker_1 undetermined 309 43.7
marker_xyz positive 500 80.0
marker_xyz negative 25 4.00
marker_xyz undetermined 100 16.00