Я младший веб-разработчик. Я изучаю около postgres, и у меня есть вопрос об использовании case-оператора.
Этот запрос находит несколько строк с данными, которые наиболее точно соответствуют определенному слову.
Результат может быть кратным.
В этом запросе значение ранжирования вычисляется с использованием оператора case в соответствии с подобием для каждой строки.
Понятно, что оператор case возвращает значение, соответствующее каждому выполнению.
Когда оператор case используется внутри функций min и window, мне интересно, как найти результат.
данная таблица PostalCode имеет вид ..
|---------------------|------------------|
| pcode | name |
|---------------------|------------------|
| 100456 | a |
|---------------------|------------------|
| 111343 | b |
|---------------------|------------------|
| 101334 | c |
|---------------------|------------------|
| 100567 | d |
|---------------------|------------------|
| 102234 | e |
|---------------------|------------------|
запрос: ..
SELECT pcode,
name
FROM (SELECT pcode,
name,
CASE WHEN pcode = '100123' THEN 0
WHEN pcode = '10012%' THEN 1
WHEN pcode = '1001%' THEN 2
WHEN pcode = '100%' THEN 3
WHEN pcode = '10%' THEN 4
WHEN pcode = '1%' THEN 5
ELSE NULL END AS hit_code,
MIN(CASE WHEN pcode = '100123' THEN 0
WHEN pcode = '10012%' THEN 1
WHEN pcode = '1001%' THEN 2
WHEN pcode = '100%' THEN 3
WHEN pcode = '10%' THEN 4
WHEN pcode = '1%' THEN 5
ELSE NULL END)
OVER(ORDER BY CASE WHEN pcode = '100123' THEN 0
WHEN pcode = '10012%' THEN 1
WHEN pcode = '1001%' THEN 2
WHEN pcode = '100%' THEN 3
WHEN pcode = '10%' THEN 4
WHEN pcode = '1%' THEN 5
ELSE NULL END) AS min_code,
FROM PostalCODE) Foo
WHERE hit_code = min_code;
и результат будет
|---------------------|------------------|
| pcode | name |
|---------------------|------------------|
| 100456 | a |
|---------------------|------------------|
| 100567 | d |
|---------------------|------------------|
Я знаю, что первый оператор case возвращает разные значения в зависимости от сходства.
После завершения регистра вызывается функция MIN, но что она вернет?
Я не могу понять этот контекст.
Пожалуйста, помогите мне.
Если вы мне поможете, я ничего не могу вам дать, но я бы хотел express выразить искреннюю благодарность.
Спасибо за чтение.