Сумма группы mysql в той же таблице

У меня есть следующая таблица:

я быназваниетипсчет
1Джонапельсин2345
2Джонжелтый5
3Джончернить5454540
4Джекапельсин1123
5Джекжелтый1000
6Джекчернить86943
7Джейнапельсин9876
8Джейнжелтый10000
9Джейнчернить102233

комментарий;

id : inte
name :   same name save more times to more rows, 
score: it is int data
type : it has string data black,white,yellow,purple,orange

Я использую следующие запросы для вычисления двух сумм баллов

SELECT name,sum(score) as `first` 
FROM salary 
WHERE type = 'orange' 

SELECT name,sum(score) as `second` 
FROM salary 
WHERE type in ('black','yellow') 

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

названиеПервый счетВторой счет
Джон23455454545
Джек112387943
Джейн9876112233

Что вы сделали, чтобы получить желаемое? (Вы должны больше, чем просто спросить, то есть вы должны объяснить, в чем ваша проблема)

Luuk 05.04.2022 18:37

Добро пожаловать в StackOverflow. Пожалуйста, не описывать свою схему - просто покажите ее нам в виде операторов CREATE TABLE и INSERT (примеры значений). Кроме того, A) покажите нам, что вы пробовали, и B) используя образцы значений, опубликуйте пример ожидаемых результатов. (Все это в виде текста, скриншоты нет)

SOS 05.04.2022 18:37
dev.mysql.com/doc/refman/5.7/en/…
RiggsFolly 05.04.2022 18:42

Обновлен вопрос, чтобы показать пример того, как опубликовать минимальный воспроизводимый пример. Кроме того, исправлено, что sql как псевдоним недействителен в предложении WHERE, то есть WHERE type in ('black','yellow') as second; недействителен

SOS 05.04.2022 20:26
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
25
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Что-то вроде этого (но это не проверено):

SELECT 
   salary.name,
   first.score as "first_score",
   second.score as "second_score"
FROM salary
LEFT JOIN (SELECT name,sum(score) as score
           FROM salary 
           WHERE type = 'orange'
          ) as first  ON first.name = salary.name
LEFT JOIN (SELECT name,sum(score)  as score
           FROM salary 
           WHERE type in ('black','yellow')
          ) as second ON second.name = salary.name
Ответ принят как подходящий

Используйте условный SUM() для агрегирования значений на основе type:

 SELECT name
        , SUM(CASE WHEN type IN ('orange') THEN score END ) AS FirstScore
        , SUM(CASE WHEN type IN ('yellow','black') THEN score END ) AS SecondScore
 FROM   salary
 GROUP BY Name    

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

названиеПервый счетВторой счет
Джон23455454545
Джек112387943
Джейн9876112233

дб <> рабочий пример здесь

ВЫБЕРИТЕ имя, СУММА (СЛУЧАЙ, КОГДА введите IN («оранжевый»), ТОГДА оценка КОНЕЦ ) AS FirstScore , СУММА (СЛУЧАЙ, КОГДА введите IN («желтый», «черный»), ТОГДА оценка END ) КАК SecondScore FROM зарплата, где введите («Оранжевый ','желтый','черный')/* если есть коричневый , в списке нет необходимости*/ СГРУППИРОВАТЬ ПО ИМЕНИ большое спасибо

asi siyah 06.04.2022 11:05

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