我希望根据组中的第一个(实际上,仅)值在group by表中设置一个列。
特别是,给出一张表
id good
1 t
1 t
2 f
3 t我想要生产这张桌子
id multiplicity goodN
1 2 0
2 1 0
3 1 1其中goodN为1当且仅当multiplicity为1,good为t
select id, count(*) as multiplicity,
if (count(*) > 1, 0, if(good = 't', 1, 0)) as goodN
from ...问题是:如何从组中提取good的第一个值(仅在我的例子中)?
PS。是否有比count(*)=1更便宜的方法来测试组的大小1?
发布于 2014-03-10 20:22:45
如果计数为1,则最大(很好)和最小(很好)都将是组中的“第一”行。
select id, count(*) as multiplicity,
if (count(*) > 1, 0, if(max(good) = 't', 1, 0)) as goodN
from ...发布于 2014-03-10 19:47:21
从..。其中id=(选择min(id)从.好的>0)
和
组按id有计数(Id)=1
您可以测试count(goods)而不是count(*),并在最后按id添加组。只取有磨耗性的记录1加有计数(货物)=1
发布于 2014-03-10 20:06:00
如果是MySQL,那么简单地说:
SELECT id,
good,
count(*) AS multiplicity,
if((count(*) > 1 AND good = 't'), @flag := 1, @flag := 0) AS goodN
FROM goods
GROUP BY good, id;如果你想让我删除我的答案,请告诉我。
https://stackoverflow.com/questions/22309687
复制相似问题