考虑一个场景:
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]的数量
(1)可以通过select info from table where id = myid
但是如何在同一个查询中实现(2)?可以在同一个查询中实现吗?
像
这样的东西select info, count(done) from table where id = myid group by name where ......
答案 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) ...