SQL计数返回一个值(而不是总数)

时间:2010-06-19 16:32:27

标签: sql mysql count

我需要在此查询中“单独”获取nid。

SELECT count(nid) as total,nid FROM bird_countries b group by nid order by total asc`

基本上我需要这样做

update table set field=1 where id in (the other query);

现在,我得到了nid和nid的总数,但是找不到如何获取nid值来使用它们。

返回第一个查询的示例是:

total nid
1     323
1     2645
1     526
2     123

所以我只想得到值323,2645,526。事实上我不想得到123,因为它的数量是2。 对于计数为1的情况,我需要将表中的一个字段设置为1。

更新(第二个问题): 我得到了一个很好的答案,但现在我应用它时出错了。我的问题是

update bird_countries set season="1" where nid in (SELECT nid FROM bird_countries group  by nid HAVING count(*) = 1)

和mysql说“你不能在FORM子句中为更新指定平板电脑目标'bird_countries'。” 嗯,有没有简单/快速的方法来做到这一点?我可以复制表bird_countries并将其用于更新(稍后放弃),但可能有更简洁的方法。谢谢!

5 个答案:

答案 0 :(得分:5)

我认为您希望nids是唯一的,没有重复。试试这个:

SELECT nid
FROM bird_countries
GROUP BY nid
HAVING COUNT(*) = 1

答案 1 :(得分:1)

编辑完成后,我会看到您正在尝试做什么

UPDATE table SET field=1 WHERE id in (SELECT nid FROM bird_countries GROUP BY nid HAVING count(nid) = 1); 

答案 2 :(得分:1)

UPDATE table
SET field = 1
WHERE id IN (
    SELECT nid
    FROM bird_countries
    GROUP BY nid
    HAVING COUNT(nid) = 1
)

答案 3 :(得分:1)

修改:更新问题后。 This article建议重写为JOIN以避免此问题。那么这种语法有用吗?

update bird_countries as b
    inner join (
       SELECT nid FROM bird_countries group  by nid HAVING count(*) = 1
    ) as t on t.nid = b.nid
set season=1

答案 4 :(得分:1)

我不确定这是否是您所需要的,但是,您是否尝试根据nId更新列?

如果你需要这样做,你可以这样做:

update table 
set field=1 
FROM table 
inner join (SELECT count(nid) as total, nid
FROM bird_countries b
group by nid
order by total asc) as Table2
ON table.id=Table2.nid