0
Ниже приведенный ниже SQL-запрос дает мне желаемые результаты, но использование операторов CASE кажется неправильным. Есть ли другой способ создать псевдоним для отфильтрованного столбца? Есть ли более эффективный способ достижения тех же результатов?Как создать псевдоним для отфильтрованного столбца в SQL-запросе
Вот текущий запрос:
SELECT
year,
college_name,
count(id_999999999) as count_id_999999999,
count(id_999999999)/count(student_id) as percent_id_999999999,
count(id_other) as count_id_other,
count(id_other)/count(student_id) as percent_id_other,
count(student_id) as total_id
FROM (SELECT fiscal_year, semester,
CASE
WHEN student_id IN ('999999999') THEN 'id - 999999999'
END
AS id_999999999,
CASE
WHEN student_id NOT IN ('999999999') THEN 'id - Other'
END
AS id_other,
student_id
FROM enrolment_data) enrol
GROUP BY year, college_name
ORDER BY year, college_name;
И вот желаемые результаты:
Спасибо. Можете ли вы объяснить, почему здесь работает функция AVG? Это кажется контр-интуитивным, поскольку столбец не отображает среднее значение. – b00kgrrl
@mariita. , , Это на самом деле среднее значение. Когда совпадения равны 1, а несоответствия - 0, тогда среднее значение составляет 1 с. –
Но я хочу знать процент по отношению к общему количеству записей, в том числе с нулевыми значениями. Так что если есть 100 записей, из которых 10 имеют нулевое значение для student_id и 20 имеют значение 999999, то процент_999999 должен составлять 20%. Будет ли работать функция AVG? – b00kgrrl