Как выбрать несколько строк с конкретными значениями и отсортировать их в MySQL - PullRequest
1 голос
/ 23 июня 2019

У меня есть база данных MYSQL с некоторыми столбцами и строками. И я хочу выбрать несколько строк с одинаковыми значениями и суммировать их, а затем отсортировать их.

например:

Id    data
1     5
2     12 
4     42
2     2
1     3
1     8
4     2

что-то вроде: данные: (16 идентификатора: 1), (данные: 14 идентификатора: 2), (данные: 44 идентификатора: 4)

для этого я попробовал этот код:

$sql = "SELECT id, SUM(data) AS value_sum FROM table GROUP BY id ORDER BY value_sum DESC LIMIT 30";
$result = mysqli_query($conn, $sql);

    $ids = "";
    $datas = "";

    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result))
        {
            $ids .= $row['p_id'] . '^';
            $datas.= $row['value_sum'] . '^';
        }
    }

И все работает нормально, и я могу получить сумму значений строк, отсортированных как value_sum.

Но моя проблема в том, что идентификаторы не отсортированы, и я тоже хочу получить отсортированные идентификаторы, но результат не отсортирован. Я имею в виду, что в результате я не знаю, могу ли я получить истинный идентификатор для value_sum.

для более подробного объяснения Я хочу этот результат:

(id 4: 44), (id 1: 16), (id 2: 14)

Как я могу это сделать?

1 Ответ

1 голос
/ 23 июня 2019

вы можете использовать sum (), группировать и упорядочивать по сумме и идентификатору

select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')')
from my_table  
group by  id   
order by sum(data) desc, id asc

или

select  id, sum(data) 
from my_table  
group by  id  
order by id asc, sum(data) desc

и если вам нужно на тех же строках

select group_concat(my_col) 
from  (
select  id, sum(data) , concat('(id ',id, ':', sum(data) , ')') my_col
from my_table  
group by  id   
order by sum(data) desc, id asc ) t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...