SQL - 如何显示年龄相同的学生?

时间:2011-01-14 04:11:31

标签: sql mysql database

我写的代码只告诉我有多少学生年龄相同。我也想要他们的名字......

SELECT YEAR(CURRENT DATE-DATEOFBIRTH) AS AGE, COUNT(*) AS HOWMANY
FROM STUDENTS
GROUP BY YEAR(CURRENT DATE-DATEOFBIRTH);

这会返回如下内容:

AGE      HOWMANY
---      -------
21       3
30       5

谢谢。

TABLE STUDENTS COLUMNS:
StudentID (primary key), Name(varchar), Firstname(varchar), Dateofbirth(varchar)

我在考虑使用上面的代码,并在某处添加函数concat,将stundents的名称放在与

相同的行上

4 个答案:

答案 0 :(得分:1)

您现有的SQL看起来有错误,但您可以使用GROUP_CONCAT

添加GROUP_CONTACT(colname)作为另一列进行提取,然后在应用中按,进行拆分

答案 1 :(得分:1)

除非您正在查找学生列表,他们的年龄以及有多少其他同龄学生,否则结果数据集在表面上看起来没有用,除非您正在查找学生列表:

SELECT NAME, AGE, HOWMANY
FROM STUDENTS AS S,
 (SELECT YEAR(CURRENT DATE-DATEOFBIRTH) AS AGE,
         COUNT(*) AS HOWMANY
  FROM STUDENTS
  GROUP BY YEAR(CURRENT DATE-DATEOFBIRTH)
 ) AS A
WHERE YEAR(CURRENT DATE-S.DATEOFBIRTH) = A.AGE

基本上使用您计算的年龄计数执行自我联接。

答案 2 :(得分:0)

怎么样......

SELECT name FROM students WHERE age = ENTER_AGE_HERE;

您可以通过查找从查询中获得的条目数来找到学生的姓名和数量。

例如,在PHP中,您可以找到数组的长度。

当然,您必须将我的示例中的名称更改为数据库中使用的名称。

答案 3 :(得分:0)

CREATE TABLE #Student
(
 id int identity(1,1),
 age int,
 name varchar(255) 
)


INSERT INTO #Student S
VALUES(21,'bob'),
(21,'tom'),
(21,'dick'),
(21,'william'),
(35,'mark'),
(35,'anthony')

SELECT age,COUNT(*),STUFF(
(
  SELECT ',' + name
  FROM #Student SS
  WHERE SS.age = S.age
  FOR XML PATH('')
), 1, 1, '')
FROM #Student s
GROUP BY age