SQL:如何从一种列/类型中获得不同的值?

时间:2019-03-15 21:40:31

标签: mysql sql

我正在尝试汇总下表中的名称中的总数:

id  type  num
2   0     90
24  1     38
2   1     878
9   0     8763
9   2     76
9   1     374

type列中有三种类型,我想找到其type = 01的所有ID。例如,在表中,id = 2id = 9具有type = 0type = 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,它会起作用,但是我认为它不正确。如何在numtype = 0的地方type = 1求和?

我很困惑,我不确定我是否解释清楚,如果您能提供一些帮助,将不胜感激。

3 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

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

答案 1 :(得分:1)

使用此查询:

  select id from tablename
  where type in (0, 1)
  group by id
  having min(type) = 0 and max(type) = 1

您将获得所有类型均为0和1的ID。
因此,您将其加入表格即可获得所需的总数:

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)

请参见demo
还是不加入:

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

请参见demo

答案 2 :(得分:0)

如果我对问题的理解很好,答案很简单:

SELECT SUM(num)
FROM name
WHERE type = 0 OR type = 1

您要对类型= 0或num的行中的所有type = 1值求和。这正是上述 SQL 查询所表达的。您实际上也来过。

您需要@lily吗?