我有下表:
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列表示此数字存在的时间。
感谢您的帮助。
答案 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