Как группировать и суммировать sql - PullRequest
1 голос
/ 05 августа 2020

У меня есть такие таблицы, как следующая. Я бы хотел выделить клиентов, у которых есть product=a

customer product score
A          a      10
A          b      20 
A          c      30
B          b      10 
B          c      20
C          a      30
C          c      40

И затем я бы хотел sum получить оценку каждого клиента.

customer product score
A          a      10
A          b      20 
A          c      30
C          a      30
C          c      40

Таким образом, я желаю получить следующий результат. Есть ли способ этого достичь?

customer score
A         60
C         70

Моя работа описана ниже. Я хочу знать следующий шаг

SELECT t1.customer, t1.product, t1.score
  FROM yourTable t1
 WHERE EXISTS (SELECT 1
                 FROM yourTable t2
                WHERE t2.customer = t1.customer
                  AND t2.product = 'a');

Спасибо

Ответы [ 5 ]

2 голосов
/ 05 августа 2020

Один из вариантов может использовать HAVING Предложение с агрегированием:

SELECT customer, SUM(score) AS score
  FROM t
 GROUP BY customer 
HAVING SUM(CASE WHEN product = 'a' THEN 1 END)>0

Демо

1 голос
/ 05 августа 2020

Используйте запрос ниже, просто нужно проверить столбец клиента в подзапросе той же таблицы, где product = 'a'

select customer, sum(score) as score from table_name where customer in
(select customer from table_name where product = 'a')
group by customer;
1 голос
/ 05 августа 2020

Теперь вам просто нужно использовать group by () & sum ()

SELECT t1.customer, sum(t1.score) 
FROM  my_table t1 
WHERE EXISTS (SELECT 1 FROM my_table t2 WHERE t2.customer = t1.customer AND t2.product = 'a') 
group by t1.customer;

или

SELECT t1.customer, sum(t1.score) 
FROM  my_table t1 
WHERE EXISTS (SELECT 1 FROM my_table t2 WHERE t2.customer = t1.customer AND t2.product = 'a') 
group by t1.customer 
order by t1.customer;
1 голос
/ 05 августа 2020

Это просто агрегирование

select customer, sum(score)
from tablename t where exists (select 1 from tablename t1 where t.customer=t2.customer and t1.product='a')
group by customer 
1 голос
/ 05 августа 2020

Вам понадобится агрегат (GROUP BY) и SUM (t1.score)

SELECT t1.customer, sum(t1.score) as summed_score
  FROM yourTable t1
WHERE EXISTS (SELECT 1 
                FROM yourTable t2 
               WHERE t2.customer = t1.customer 
                 AND t2.product = 'a')
GROUP BY t1.customer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...