我在MySQL中有一个学生信息表,看起来像这样(简化):
| age : int | city : text | name : text | ----------------------------------------------------- | | | |
我希望选择一个城市内的所有学生姓名和年龄,以及每个学生,他的年龄组中有多少其他学生(即,有多少学生分享他的年龄值).
我设法用子查询做到了这一点; 就像是:
select name, age as a, (select count(age) from tbl_students where age == a) from tbl_students where city = 'ny'
但它似乎有点慢,我不是SQL-wiz,所以我想我会问是否有更聪明的方法来做到这一点.该表按年龄和城市编制索引.
select t1.name, t1.age as a, count(t2.age) NumberSameAge from tbl_students t1 inner join tbl_students t2 on t1.age=t2.age where city = 'ny' group by t1.name, t1.age
未经测试,但有类似的东西.在一个加入时,我是一个小组.这有时会更快,因为您正在运行的查询正在为返回的每一行执行嵌套子查询,而我上面发布的查询(或者至少是带有join和groupby的结构)只对相关学生执行查询一旦.