sql将count与其他字段组合在一起

时间:2015-10-26 16:41:55

标签: sql sqlite

考虑一个场景:

id    name  info  done
-----------------------
1     abc    x      0
2     abc    y      1   <-- I have this id
3     pqr    g      1
4     pqr    h      0
5     pqr    i      1   <-- I have this id

我有每个名字的最后一个条目的id。

我期待的结果包括两件事:

  1. 名称

  2. 的最后一个条目的信息
  3. 该名称已完成[有值1]的数量

  4. (1)可以通过select info from table where id = myid

    轻松实现

    但是如何在同一个查询中实现(2)?可以在同一个查询中实现吗?

    这样的东西
    select info, count(done) from table where id = myid group by name where ......
    

4 个答案:

答案 0 :(得分:2)

考虑到完成是1或0你可以得到总和并显示它。

select info, sum(done) 
from table where id = mid 
group by info

编辑:

select info, s
from table
inner join (
    select name, sum(done) as s
    from table
    group by name    
) as zzz on zzz.name = table.name
where id = myid

答案 1 :(得分:2)

这有点复杂,但可以使用条件聚合来完成:

select max(case when t.id = myid then info end), sum(done)
from table t
where t.name = (select name from table t2 where t2.id = myid);

关键是获取给定名称的所有行。

如果您有多个列,那么可能需要使用相关的子查询:

select t.*,
       (select sum(t2.done) from table t2 where t2.name = t.name) as numdone
from table t
where t.id = myid;

答案 2 :(得分:2)

您可以在name上将表格重新连接到自己以获取此信息。

SELECT t1.myid, t1.info, sum(t2.done) as number_of_done
FROM table t1 INNER JOIN table t2 on t1.name = t2.name
WHERE t1.id = myid
GROUP BY t1.myid, t1.info

答案 3 :(得分:1)

如果您希望显示更详细的数据,请使用窗口函数:

select info, count(done) over (partition by name) ...
相关问题