Если "в лоб":
1. Убираем группировку, никаких подгрупп база не выдаст, будет по 1 записи на "уровень"
- $ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` GROUP BY `rs_type` ORDER BY `id` ASC");
+ $ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` ORDER BY `id` ASC");
2. Фильтруем итоговый вывод в 3 массива и выводим их
<?php
$all = $ref_system->fetchAll();
$plc = array_filter($all, fn ($fields) => $fields['rs_type'] === 'plc');
$deposit = array_filter($all, fn ($fields) => $fields['rs_type'] === 'deposit');
$offer = array_filter($all, fn ($fields) => $fields['rs_type'] === 'offer');
?>
<?php foreach ([$plc, $deposit, $offer] as $level => $data): ?>
<div class="col-md-4 col-12 mb-lg-0 mb-4">
<div class="fw-bold h5 mb-3">
<?= $level + 1 ?>-й уровень
</div>
<?php foreach($data as $ref) : ?>
<div class="mb-4">
<span class="text-muted fw-semibold"><?=$ref['rs_type']?></span>
<div>
<div class="d-flex align-items-center pt-2">
<div class="progress w-100">
<div class="progress-bar bg-warning" role="progressbar" style="width: 100%;" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<span class="ms-3 fw-bold text-warning"><?=$ref['rs_percent']?>%</span>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>