如何计算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