如何计算SQL中列值的出现次数?
我有一桌学生:如何计算SQL中列值的出现次数?,sql,sql-server-2008,Sql,Sql Server 2008,我有一桌学生: id | age|num ------------- 0 | 25| 10 1 | 25| 5 2 | 23| 5 SELECT id, age, num FROM students 我想查询所有学生,并添加一个列,统计同龄学生的数量: id | num | age | agecount|numcount ------------------------------------- 0 | 10 | 25 | 2 |1 1 | 5 | 2
id | age|num
-------------
0 | 25| 10
1 | 25| 5
2 | 23| 5
SELECT
id, age, num
FROM
students
我想查询所有学生,并添加一个列,统计同龄学生的数量:
id | num | age | agecount|numcount
-------------------------------------
0 | 10 | 25 | 2 |1
1 | 5 | 23 | 1 |2
SELECT
age
, count(1)
FROM
students
GROUP BY
age
最有效的方法是什么?如果有更好的方法**。是否有?计算同龄学生人数:
select age ,count(age) from s_table group by age
您有两个问题:
学生名单上有一个:
id | age|num
-------------
0 | 25| 10
1 | 25| 5
2 | 23| 5
SELECT
id, age, num
FROM
students
同龄学生人数为1人:
id | num | age | agecount|numcount
-------------------------------------
0 | 10 | 25 | 2 |1
1 | 5 | 23 | 1 |2
SELECT
age
, count(1)
FROM
students
GROUP BY
age
现在,您必须组合这两个查询:
可以联接一个或多个表或子查询。让我们这样做:
SELECT
S.id, S.age, S.num, age.cnt
FROM
-- List of all students
(
SELECT
id, age, num
FROM
students
) S
-- Ages with student counts
INNER JOIN (
SELECT
age
, count(1) AS cnt
FROM
students
GROUP BY
age
) A
ON S.age = A.age
您可以通过删除第一个子查询来简化上述查询,并改用students表:
SELECT
S.id, S.age, S.num, A.cnt
FROM
students S
-- Ages with student counts
INNER JOIN (
SELECT
age
, count(1) AS cnt
FROM
students
GROUP BY
age
) A
ON students.age = age.age
现在,您可以修改此示例查询以实现您的目标。您使用的是什么DBMS?仅供参考:当您可以这样做时,是否有必要加入:选择id、年龄、数量,从学生t2中选择count1,其中t2.age=t1.age作为cnt?join不是慢了一点吗?这要看情况而定。您可以在“选择”列表中使用单值子查询,但它将被计算并针对每一行运行。加入后,将计算加入的结果集,并将其加入所有相关记录。您必须在当前表中自己进行测试。对于小表,差异将很小,但在大数据库中,差异可能很大。您必须同时测试这两个字段。两个字段的计数sage和num