#sql #postgresql #amazon-web-services #amazon-quicksight
#sql #postgresql #amazon-веб-сервисы #amazon-quicksight
Вопрос:
Мы используем Postgres, и в нашей student
таблице у нас есть столбцы для буквенных оценок [A, B, C, D, F]. У нас есть два столбца для предыдущей оценки и текущей оценки. Я пытаюсь найти способ запустить отчет о том, насколько изменились оценки для каждой записи. Итак, по сути, мне нужно поле для current_grade-previous_grade
но поскольку значения являются текстовыми, я не могу легко выполнить это сравнение. Я надеялся, что parseInt
в AWS QuickSight будет проанализировано значение для оценок, но в документации говорится, что оно игнорирует нечисловые значения. Поскольку AWS QuickSight, похоже, не решает эту проблему, как мне сделать это в моем запросе в SQL, когда у меня нет доступа на запись и я не могу создать для этого сгенерированные столбцы? Я надеялся на что-то простое, например:
SELECT id, report_card->'grade' as current_grade, report_card->'previous_grade' as old_grade, old_grade-current_grade FROM Students;
Комментарии:
1. Если у вас есть нечисловые значения в оценках, как вы планируете их сравнивать? Можете ли вы показать некоторые примеры данных?
2. Они будут просто буквенными, такими как «A», «B», «C», «D» для каждого столбца. Я просто хочу знать разницу. Некоторые языки используют для них ключ ASCII и ставят на них минус. Например, B-A будет преобразован в 066-065 и приведет к 1. Я думаю о чем-то в этом роде.
Ответ №1:
Quicksight, похоже, поддерживает locate
то, что вы могли бы настроить в своих интересах. Это как если бы вы присваивали номера оценкам в столбцах current_grade и previous_grade
locate('ABCDEF', current_grade) - locate('ABCDEF', previous_grade)
Если это не работает, у них также есть ifelse
, которые вы можете изменить следующим образом
ifelse(current_grade="A", 1, current_grade="B", 2, ......,current_grade="F", 6) -
ifelse(previous_grade="A", 1, previous_grade="B", 2, ......,previous_grade="F", 6)
Комментарии:
1. Спасибо. ifelse был лучшим решением, которое я мог придумать. Это просто показалось немного странным, но, я думаю, оно выполняет свою работу.
2. @Jorjani Вы пробовали использовать locate?
3. Locate — интересная идея. Я попробую.