Sqlite: выберите лучшие значения x для n пользователей

  • Не используйте $ в расширении параметра
  • Используйте -eq для численного сравнения
  • Добавьте пробел перед ]:

Всего:

if [ ${#1} -eq 2 ]
then
  echo "It's two characters long"
fi
0
задан zofka 6 March 2019 в 09:11
поделиться

2 ответа

Оконные функции - ваш друг (требуется 3.25 или новее):

SELECT user, score
FROM (SELECT user, score,
             row_number() OVER (PARTITION BY user ORDER BY score DESC) AS rn
       FROM test)
WHERE rn <= 3
ORDER BY user, score DESC;
0
ответ дан Shawn 6 March 2019 в 09:11
поделиться

Вам нужно создать другую таблицу для хранения результата вывода, в моем примере я назвал ее outputresult (user, score) :

Declare     @duser nvarchar(30)
Declare     @duser2 nvarchar(30)
Declare     @dscore int

DECLARE cur1 CURSOR FOR
select distinct [user] from TOP3s



OPEN cur1

FETCH NEXT FROM cur1 INTO @duser

WHILE @@Fetch_Status = 0 

BEGIN

Declare cur2 Cursor FOR
select top (3) [user], score from TOP3s where [user] = @duser order by [user], score desc
OPEN cur2

fetch next from cur2 into @duser2, @dscore

WHILE @@Fetch_Status = 0 

begin

insert into outputresult values(@duser2, @dscore)

fetch next from cur2 into @duser2, @dscore

end

close cur2
deallocate cur2


FETCH NEXT FROM cur1 INTO @duser

end

close cur1

Deallocate cur1


--you can run this query to check the output:
select * from outputresult
0
ответ дан Mahdi Khardani 6 March 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: