Как получить 3 самых распространенных числа в столбце базы данных SQLITE3 с помощью Laravel?

#sql #laravel #sqlite #eloquent

#sql #laravel #sqlite #красноречивый

Вопрос:

Я создаю веб-приложение, в котором люди голосуют за клиентов. После голосования участников число появится в таблице «Проголосовали за» для каждого конкретного участника. Мне интересно, есть ли способ получить 3 самых распространенных номера (костюмы с наибольшим количеством голосов) из столбца «Проголосовали за», а затем вставить их в другую таблицу. В следующем примере будут сохранены числа 33, 22 и 11, но остальные будут удалены…

 user | votedFor
1    |  33
2    |  33
3    |  33
4    |  33
5    |  22
6    |  22
7    |  22
8    |  11
9    |  11
10   |  1
11   |  2
12   |  3
  

У меня не так много кода для показа — я оглядываюсь, чтобы попытаться разобраться. Нужно ли мне выполнять необработанный SQL-запрос, и я должен просто сосредоточиться на этом, или есть способ сделать это с помощью Eloquent и SQLITE3?

Ответ №1:

В SQLite вы можете использовать агрегацию с order by и limit :

 select votedFor
from t
group by votedFor
order by count(*) desc
limit 3;
  

Ответ №2:

Используйте функцию окна aggregation и RANK (), чтобы получить также связи:

 select votedFor
from (
  select votedFor, 
         rank() over (order by count(*) desc) rnk
  from tablename
  group by votedFor
)
where rnk <= 3
order by rnk;
  

Смотрите демонстрацию.
Результаты:

 > | votedFor |
> | -------: |
> |       33 |
> |       22 |
> |       11 |