У меня есть следующая таблица:
я бы | название | тип | счет |
---|---|---|---|
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')
я хочу увидеть результат, который (все имена должны быть группой, одним именем.)
название | Первый счет | Второй счет |
---|---|---|
Джон | 2345 | 5454545 |
Джек | 1123 | 87943 |
Джейн | 9876 | 112233 |
Добро пожаловать в StackOverflow. Пожалуйста, не описывать свою схему - просто покажите ее нам в виде операторов CREATE TABLE и INSERT (примеры значений). Кроме того, A) покажите нам, что вы пробовали, и B) используя образцы значений, опубликуйте пример ожидаемых результатов. (Все это в виде текста, скриншоты нет)
Обновлен вопрос, чтобы показать пример того, как опубликовать минимальный воспроизводимый пример. Кроме того, исправлено, что sql как псевдоним недействителен в предложении WHERE, то есть WHERE type in ('black','yellow') as second;
недействителен
Что-то вроде этого (но это не проверено):
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
Полученные результаты:
название | Первый счет | Второй счет |
---|---|---|
Джон | 2345 | 5454545 |
Джек | 1123 | 87943 |
Джейн | 9876 | 112233 |
дб <> рабочий пример здесь
ВЫБЕРИТЕ имя, СУММА (СЛУЧАЙ, КОГДА введите IN («оранжевый»), ТОГДА оценка КОНЕЦ ) AS FirstScore , СУММА (СЛУЧАЙ, КОГДА введите IN («желтый», «черный»), ТОГДА оценка END ) КАК SecondScore FROM зарплата, где введите («Оранжевый ','желтый','черный')/* если есть коричневый , в списке нет необходимости*/ СГРУППИРОВАТЬ ПО ИМЕНИ большое спасибо
Что вы сделали, чтобы получить желаемое? (Вы должны больше, чем просто спросить, то есть вы должны объяснить, в чем ваша проблема)