How can I make global leaderboard for this script?

Hey, I have a issue with making global leaderboard for this script:

local datastores = game:GetService("DataStoreService")
local datastore = datastores:GetDataStore("DataStore1")

local function serializeData(player)
	local data = {}
	local leaderstats = player.Records
	for i, v in ipairs(leaderstats:GetChildren()) do
		table.insert(data, {name = v.Name, value = v.Value})
	end
	return data
end

game.Players.PlayerAdded:Connect(function(plr)
	local itemsfolder = Instance.new("Folder", plr)
	itemsfolder.Name = "Records"


	for i,v in pairs(game:GetService("ReplicatedStorage"):WaitForChild("Levels"):GetChildren()) do
		local e = Instance.new("IntValue", itemsfolder)
		e.Name = v.Name
		e.Value = 0
	end
	
	if datastore:GetAsync("Stats_"..plr.UserId) then -- found data loading it
		for i,v in pairs(datastore:GetAsync("Stats_"..plr.UserId)) do
			if itemsfolder:FindFirstChild(v.name) then
				itemsfolder:FindFirstChild(v.name).Value = v.value
			end
		end
	else -- didn't found data making new one
		local e = serializeData(plr)
		datastore:SetAsync("Stats_"..plr.UserId, e)
	end
end)


game.Players.PlayerRemoving:Connect(function(plr)
	local e = serializeData(plr)
	if datastore:GetAsync("Stats_"..plr.UserId) then -- found data saving it
		datastore:SetAsync("Stats_"..plr.UserId, e)
	else
		datastore:SetAsync("Stats_"..plr.UserId, e) -- didn't found data saving anyway
	end
end)

How can I make a leaderboard for that?
Thanks for any help!

Create a separate script that retrieves data from the DS, sorts it based on the desired values, and updates a GUI element representing the leaderboard with the sorted data.

Can you do that for me? I really have no clue how does it work. I’m new with leaderstats

I already have a script that continuously updates the leaderboard GUI by retrieving the sorted data from the DS, creating GUI elements, and displaying the top 10 players based on the specified values, here you go, change whatever you need to Xx

Put this in serverscriptservice:

local leaderboardGui = -- Replace this with the code to reference your leaderboard GUI

local function updateLeaderboard()
	-- Clear the existing leaderboard entries
	for _, child in ipairs(leaderboardGui:GetChildren()) do
		child:Destroy()
	end

	local sortedData = datastore:GetSortedAsync(false, 10) -- Sort in descending order, limit to top 10 players

	for rank, entry in ipairs(sortedData) do
		local playerName = entry.key
		local value = entry.value

		local entryFrame = Instance.new("Frame")
		entryFrame.Size = UDim2.new(1, 0, 0, 30)
		entryFrame.Parent = leaderboardGui

		local rankLabel = Instance.new("TextLabel")
		rankLabel.Size = UDim2.new(0, 30, 1, 0)
		rankLabel.Position = UDim2.new(0, 0, 0, 0)
		rankLabel.Text = tostring(rank)
		rankLabel.Parent = entryFrame

		local nameLabel = Instance.new("TextLabel")
		nameLabel.Size = UDim2.new(0.6, -30, 1, 0)
		nameLabel.Position = UDim2.new(0, 30, 0, 0)
		nameLabel.Text = playerName
		nameLabel.Parent = entryFrame

		local valueLabel = Instance.new("TextLabel")
		valueLabel.Size = UDim2.new(0.4, 0, 1, 0)
		valueLabel.Position = UDim2.new(0.6, 0, 0, 0)
		valueLabel.Text = tostring(value)
		valueLabel.Parent = entryFrame
	end
end

updateLeaderboard()

while true do
	wait(60) -- Wait for 60 seconds
	updateLeaderboard()
end