Объединение двух строк таблицы на основе существования одного столбца

0

Предполагая, что у меня есть таблица ниже:

<pre>
    <table>
        <tr>
            <td><b>id</b></td>
            <td><b>name</b></td>
            <td><b>rank</b></td>
        </tr>
        <tr>
            <td>A</td>
            <td>Chicago</td>
            <td>4</td>
        </tr>
        <tr>
            <td>B</td>
            <td>New York</td>
            <td>3</td>
        </tr>
        <tr>
            <td>A</td>
            <td>Chicago</td>
            <td>5</td>
        </tr>
        <tr>
            <td>C</td>
            <td>Ohio</td>
            <td>2</td>
        </tr>
        <tr>
            <td>A</td>
            <td>Chicago</td>
            <td>3</td>
        </tr>
    </table>
</pre>

Где столбец id связывает все строки.

Как я могу объединить все строки, имеющие одинаковое значение id вместе, а столбец ранга будет средним для всех объединенных строк.

Например, результат будет выглядеть следующим образом:

<pre>
    <table>
        <tr>
            <td><b>id</b></td>
            <td><b>name</b></td>
            <td><b>rank</b></td>
        </tr>
        <tr>
            <td>A</td>
            <td>Chicago</td>
            <td>4</td>
        </tr>
        <tr>
            <td>B</td>
            <td>New York</td>
            <td>3</td>
        </tr>
        <tr>
            <td>C</td>
            <td>Ohio</td>
            <td>2</td>
        </tr>
    </table>
</pre>

Где 4 в столбце ранга - средняя сумма всех строк, слияние в первой таблице

Примечание. Каждая строка представляет собой массив, взятый из 2D-массива. Поэтому результатом должен быть 2D-массив.

Использование SQL слишком сложно, так как эта таблица состоит из 4 других таблиц из базы данных. Поэтому я бы предпочел ответ на PHP или JavaScript

благодаря

Теги:

4 ответа

1

попробуй это

select id, name, avg(rank) from yourTable
group by id,name
1

Как насчет

SELECT id, name, avg(rank) FROM table GROUP BY id, name;

Ключом здесь является группа.

Как вы сказали, ваша таблица создана путем объединения четырех таблиц, вы можете использовать ее с подзапросом:

SELECT id, name, avg(rank) FROM
(
   SELECT * FROM whatver --here goes your statement joining the four tables
) 
GROUP BY id, name;
  • 0
    Спасибо, я работал над проблемой до сих пор, и она работает. Но я попробую ваше решение, чтобы добавить больше знаний.
0
SELECT ID,NAME,AVG([RANK])[RANK] FROM TABLE GROUP BY ID,NAME
  • 0
    Пожалуйста, добавьте некоторые пояснения к вашему ответу только по коду. Когда новые пользователи видят, что высокопоставленные пользователи публикуют решения только для кода, они думают, что это «то, что нужно делать здесь». Пожалуйста, покажите новым пользователям, что каждый ответ заслуживает объяснения.
0
SELECT 'id', 'name', AVG( rank ) AS 'rank' FROM table_name GROUP BY 'id', 'name' 
  • 0
    Пожалуйста, добавьте некоторые пояснения к вашему ответу только по коду.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню