У меня есть таблица с именем users_by_group. В этой таблице все пользователи, принадлежащие к одной и той же группе, хранятся в том же разделе, упорядоченном по его user_id. У каждого пользователя есть 2 значения, значение1 и значение2. Я создал пользовательскую функцию, которая вычисляет оценку пользователя на основе входной переменной карты. Моя проблема: я хочу вычислить оценку каждого пользователя в разделе, но вернуть только 10 пользователей с самым высоким результатом. Каждый раздел может иметь более 10000 пользователей (строк). Если я использую ограничение 10, оценка рассчитывается только для 10 строк внутри раздела, но я хочу рассчитать ее для каждого пользователя внутри раздела и получить 10 пользователей с наивысшей оценкой. Есть ли другой способ получить мою цель? Переменная карты input_var различна для каждого оператора select, поэтому ее нельзя сохранить в виде столбца. Спасибо.
CREATE TABLE users_by_group(
group text,
user_id uuid,
value1 int,
value2 int ,
PRIMARY KEY ((group),user_id);
CREATE OR REPLACE FUNCTION score (value1 int, value2 int, input_var map<int,float>)
RETURNS NULL ON NULL INPUT
RETURNS float LANGUAGE java AS '
return Float.valueOf(input_var.get(value1) + input_var.get(value2));';
SELECT score(value1, value2, {1:0.5, 2:1, 3: 0, 4:0.3, 5:1, 10:0}) as score, user_id FROM users_by_group WHERE group='AA-B59'