SQLite选择所有记录和计数

时间:2014-02-11 17:46:29

标签: mysql sql sqlite

我有下表:

CREATE TABLE sometable (my_id INTEGER PRIMARY KEY AUTOINCREMENT, name STRING, number STRING);

运行此查询:

SELECT * FROM sometable;

产生以下输出:

1|someone|111
2|someone|222
3|monster|333

除了这三个字段外,我还想包括一个表示表中存在相同名称的次数的计数。

我显然已经尝试过:

SELECT my_id, name, count(name) FROM sometable GROUP BY name;

虽然这不会给我每条记录的单独结果行。

理想情况下,我会得到以下输出:

1|someone|111|2
2|someone|222|2
3|monster|333|1

第4列表示此数字存在的时间。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用select子句中的相关子查询执行此操作:

Select st.*,
       (SELECT count(*) from sometable st2 where st.name = st2.name) as NameCount
from sometable st;

您也可以将此作为join写入聚合子查询:

select st.*, stn.NameCount
from sometable st join
     (select name, count(*) as NameCount
      from sometable
      group by name
    ) stn
    on st.name = stn.name;

编辑:

至于表现,找出答案的最好方法是尝试两者并计时。当sometable(name)上有索引时,相关子查询将最有效。尽管聚合在MySQL中被认为是缓慢的,但有时这种类型的查询获得了令人惊讶的好结果。最好的答案是测试。

答案 1 :(得分:0)

Select *, (SELECT count(my_id) from sometable) as total from sometable