SQL-запрос для вставки нового столбца путем добавления значений в один столбец с использованием различных функций

У меня есть таблица с тремя столбцами (a, b, c), мне нужно создать новый столбец «d», используя отличительные особенности столбцов a и b.

a  b  c
1  p  2
1  p  3 
2  q  4
1  q  2
2  r  4
2  r  2
1  p  2 

Мне нужен ответ, как показано ниже, где d - это сумма уникального столбца a и b

a b c d
1 p 2 7
1 p 3 7
2 q 4 4
1 q 2 2
2 r 4 6
2 r 2 6
1 p 2 7

Результат столбца d:

для различных (a и b), затем сложите значения c. А затем вставьте значения в столбец d (совпадающие с различными значениями)

Какой у тебя dbms

D-Shih 26.07.2018 09:08

И объясните логику вывода, например, как 1 + p = 7?

Joakim Danielson 26.07.2018 09:11
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
2
1 245
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

используйте case when и создайте другой столбец, если сгенерированное значение является постоянным

 select a,b,c, case when a=1  and b='p'  then 7
    when a=2 and b='q' then 4
    when a=2 and b='r' then 6
    when a=1 and b='q' then 2 else '' end as d from
    your_table

Но мне кажется, вам нужна групповая сумма a, b в качестве 4-го столбца d, поэтому вы можете сделать как показано ниже

select t1.a,t1.b,t1.c,t2.d from yourtable t1
inner join
(select a,b ,sum(c) as d from your table group by a,b) as t2
on t1.a=t2.a and t1.b=t2.b
Ответ принят как подходящий

Вы можете попробовать использовать столбцы SUM и group bya и b в подзапросе, а затем самостоятельно join

TestDLL

create table t(
   a int,
   b varchar(5),
   c int
);

insert into t values (1,'p',2);
insert into t values (1,'p',3);
insert into t values (2,'q',4);
insert into t values (1,'q',2);
insert into t values (2,'r',4);
insert into t values (2,'r',2);
insert into t values (1,'p',2);

Запрос

SELECT t1.*,t2.d 
FROM T t1 INNER JOIN (
    SELECT a,b,SUM(c) d
    FROM T
    GROUP BY a,b
) t2 on t1.a = t2.a and t1.b=t2.b 

[Полученные результаты]:

| a | b | c | d |
|---|---|---|---|
| 1 | p | 2 | 7 |
| 1 | p | 3 | 7 |
| 2 | q | 4 | 4 |
| 1 | q | 2 | 2 |
| 2 | r | 4 | 6 |
| 2 | r | 2 | 6 |
| 1 | p | 2 | 7 |

sqlfiddle

Большое вам спасибо, D-Shih .. Кроме того, могу ли я спросить, можно ли суммировать значения для интервала 2.

Sara 26.07.2018 09:21

Какой у тебя interval of 2? Не могли бы вы привести мне пример? благодарить

D-Shih 26.07.2018 09:23

Например: a b c d 1 p 2 5/1 p 3 5/1 p 4 6/1 p 2 6 / Что-то похожее на это. сложение значений с интервалом 2 для различных значений

Sara 26.07.2018 09:26

Какая у вас база данных? sql-server или mysql или другое?

D-Shih 26.07.2018 09:34

Мои базы данных - это mysql.

Sara 26.07.2018 09:36

Если ваша версия mysql не поддерживает функцию Windows, это будет сложно сделать :(

D-Shih 26.07.2018 09:48

В любом случае спасибо .. Я проверю другие возможности. :)

Sara 26.07.2018 09:51

Если поддерживается оконная функция для SUM

select a, b, c, sum(c) over (partition by a, b) as d
from yourtable

Вы можете мне подробно объяснить. Я новичок в sql. Можно ли складывать значения с четким интервалом 2? Я использую mysql 5.7

Sara 26.07.2018 10:00

@Sara Если вам это действительно нужно, с интервалом 2. Тогда я предлагаю задать еще один вопрос по нему. Это более сложное требование. Но на этот раз убедитесь, что вы пометили этот вопрос с помощью MySql. И укажите версию. Потому что вам не нужно что-то, что работает только в MySql 8.x.

LukStorms 26.07.2018 10:43

Другие вопросы по теме