我在MySQL中有一个学生信息表,看起来像这样(简化):
| age : int | city : text | name : text |
-----------------------------------------------------
| | | |
Run Code Online (Sandbox Code Playgroud)
我希望选择一个城市内的所有学生姓名和年龄,以及每个学生,他的年龄组中有多少其他学生(即,有多少学生分享他的年龄值).
我设法用子查询做到了这一点; 就像是:
select
name,
age as a,
(select
count(age)
from
tbl_students
where
age == a)
from
tbl_students
where
city = 'ny'
Run Code Online (Sandbox Code Playgroud)
但它似乎有点慢,我不是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
Run Code Online (Sandbox Code Playgroud)
未经测试,但有类似的东西.在一个加入时,我是一个小组.这有时会更快,因为您正在运行的查询正在为返回的每一行执行嵌套子查询,而我上面发布的查询(或者至少是带有join和groupby的结构)只对相关学生执行查询一旦.
归档时间: |
|
查看次数: |
565 次 |
最近记录: |