Как не суммировать всю строку в таблице - PullRequest
0 голосов
/ 25 сентября 2019

Это моя таблица:

+---------+-----+
| id_user | pax |
+---------+-----+
|       2 |   2 |
|       2 |   2 | 
|       3 |   2 |
|       3 |   2 |
+---------+-----+

Итак, у меня есть 4 строки данных

  • id_user = 2, с 2 строками данных,
  • id_user = 3, с 2 строками данных

Как мне суммировать только 1 из каждой строки id_user?итак, сумма, которую я хочу получить, равна 4, а не 8

Ответы [ 3 ]

2 голосов
/ 25 сентября 2019

Вам нужно GROUP BY.

SELECT
    id_user,
    SUM(pax)

FROM
    myTable

GROUP BY
    id_user

См. SQL FIDDLE , например, для использования ваших данных.

Вот некоторая документация.

0 голосов
/ 25 сентября 2019

Не ясно, что вы ищете, но вот некоторые возможности.

drop table if exists t;
create table t
(id_user int,pax int);
insert into t values
(       2 ,   2 ),
(       2 ,   2 ), 
#(       2 ,   3 ), 
(       3 ,   2 ),
(       3 ,   2 );


select sum(pax) sumpax
from 
(select distinct id_user,pax from t) s;

+--------+
| sumpax |
+--------+
|      4 |
+--------+
1 row in set (0.00 sec)

select id_user,sum(pax) sumpax
from
(select distinct id_user,pax from t) s
group by id_user with rollup;

+---------+--------+
| id_user | sumpax |
+---------+--------+
|       2 |      2 |
|       3 |      2 |
|    NULL |      4 |
+---------+--------+
3 rows in set (0.00 sec)

select id_user,sum(pax) sumpax
from t
group by id_user with rollup;

+---------+--------+
| id_user | sumpax |
+---------+--------+
|       2 |      4 |
|       3 |      4 |
|    NULL |      8 |
+---------+--------+
3 rows in set (0.00 sec)
0 голосов
/ 25 сентября 2019

Я бы рекомендовал использовать row_number():

select sum(pax)
from (select t.*,
             row_number() over (partition by id_user order by pax) as seqnum
      from t
     ) t
where seqnum = 1;

row_number(), что дает вам гибкость при , какое значение использовать (в этом случае выбирается минимальное значение pax),Это также позволяет вам включать другую информацию, такую ​​как общее количество строк.

Примечание. Если столбец, такой как pax, повторяется в разных строках, свидетельствует о том, что ваши данные не нормализованы.Иногда это происходит при работе со сводными таблицами.Однако чаще всего это указывает на проблему с моделью данных, которая должна быть исправлена ​​наличием таблицы с одной строкой на значение id_user и pax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...