#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь просуммировать общее число из приведенной ниже таблицы name:
id type num
2 0 90
24 1 38
2 1 878
9 0 8763
9 2 76
9 1 374
В type
столбце есть три типа, я хотел бы найти все идентификаторы, которые их type = 0
и 1
. например, в таблице id = 2
и id = 9
имеют type = 0
и type = 1
. Итак, мы выберем эти данные и сложим их вместе, как показано ниже:
type: num
id 2 - 0:90
1:878
id 9 - 0:8763
1: 374
sum = 90 878 8764 374 = 10,106
Я выполнил запрос следующим образом:
SELECT SUM(num) FROM table WHERE type = 0 AND type = 1;
ut показывать нечего. Это сработает, если я изменю запрос на type = 0 OR type = 1
, но я не думаю, что это правильно. Как суммировать, num
где type = 0
и type = 1
?
Я очень смущен, я не уверен, что я ясно объясняю, если вы можете оказать некоторую помощь, это будет очень ценно.
Комментарии:
1.
where type = 0 and type = 1
. Как вы думаете, это даст вам какой-либо результат? Два условия вместе никогда не будут истинными. Запись не может иметь оба типа 0 и 1.
Ответ №1:
С помощью этого запроса:
select id from tablename
where type in (0, 1)
group by id
having min(type) = 0 and max(type) = 1
вы получаете все идентификаторы, которые имеют оба типа 0 и 1.
Итак, вы присоединяете его к таблице, чтобы получить желаемое общее количество:
select sum(t.num) total
from tablename t inner join (
select id from tablename
where type in (0, 1)
group by id
having min(type) = 0 and max(type) = 1
) g on g.id = t.id
where t.type in (0, 1)
Смотрите демо
Или без объединения:
select sum(t.num) total from (
select id, sum(num) num from tablename
where type in (0, 1)
group by id
having min(type) = 0 and max(type) = 1
) t
Смотрите демо
Ответ №2:
Это должно сработать:
select
sum(a.num b.num)
from (
select id, num from table where type = 0
) a
join (
select id, num from table where type = 1
) b on a.id = b.id
Ответ №3:
Если я хорошо понимаю вопрос, ответ довольно прост:
SELECT SUM(num)
FROM name
WHERE type = 0 OR type = 1
Вы хотите суммировать все num
значения из строк, где type = 0 или type = 1
. Это именно то, что выражает приведенный выше SQL запрос. К которому вы, собственно, тоже пришли.
Это то, что тебе нужно @lily?