SQL: Как получить другое значение из одного столбца / типа?

#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?