Как получить общее значение выпитых литров. Команда /leaders

Хочу создать команду /leaders, что-то наподобие как на скриншоте: введите сюда описание изображения

В db.py у меня есть данная функция не знаю как назвать, а именно get_totalenergetik: #UPD

import sqlite3
import time

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()

    def user_exists(self, user_id):
        with self.connection:
            result = self.cursor.execute("SELECT * FROM `users` WHERE `user_id` = ?", (user_id,)).fetchall()
            return bool(len(result))
            
    def add_user(self, user_id):
        with self.connection:
            self.cursor.execute("INSERT INTO `users` (`user_id`) VALUES (?)", (user_id,))
            self.connection.commit() ###

    def add_energetik(self, number, user_id):
            with self.connection:
                self.cursor.execute("UPDATE `users` SET `number` = `number` + ? WHERE `user_id` = ?", (number, user_id,))
                self.connection.commit() ###

    def get_totalenergetik(self, user_id):
            with self.connection:
                return self.cursor.execute("SELECT `number` FROM `users` WHERE `user_id` = ?;", (user_id, )).fetchall() ### UPD

    def get_top_rows():
        connection = sqlite3.connect(db_file)
        cursor = self.connection.cursor()
        with connection:
            return cursor.execute("SELECT * FROM users order by number limit 0,5").fetchall()

И вот команда: #UPD

@dp.message_handler(commands=['leaders'], chat_type=[types.ChatType.SUPERGROUP, types.ChatType.GROUP])
async def leaders(message: types.Message):
        answer = ''
        data = db.get_top_rows()
        i = 0
        for x in data:
            i += 1
            name = await bot.get_chat(x[1])
            answer += f"{i}.{name['first_name']} - выпито {x[2]} л. энергетика.\n"
        await bot.send_message(message.chat.id, answer)

UPD: введите сюда описание изображения


Ответы (1 шт):

Автор решения: Clark Devlin

Функция для извлечения топ записей из бд, которая извлечет 5 строк с самыми большими значениями в numbers:

def get_top_rows():
    connection = sqlite3.connect(db_file)
    cursor = self.connection.cursor()
    with connection:
        return cursor.execute("SELECT * FROM users order by number limit 0,5").fetchall()

Хендлер для команды

@dp.message_handler(commands=['leaders'], chat_type=[types.ChatType.SUPERGROUP, types.ChatType.GROUP])
async def leaders(message: types.Message):
    answer = ''
    data = db.get_top_rows()
    data.reverse()
    i = 0
    for x in data:
        i += 1
        name = await bot.get_chat(x[1])
        answer += f"{i}.{name['first_name']} — выпито {x[2]} литров энергетика.\n"
    await bot.send_message(message.chat.id, answer)
→ Ссылка