Сравнение различий в символах в SQL (или AWS QuickSight)

#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 — интересная идея. Я попробую.