gpt4 book ai didi

MySQL CrossTab 并删除重复项

转载 作者:行者123 更新时间:2023-11-29 20:03:35 24 4
gpt4 key购买 nike

我在 MySQL 中有一个表,其中记录了学生注册的每一年的信息。我想生成一个查询,显示 yyyy 出生的 nnn 名学生,学年结束为 aaaa。我很快就完成了该查询,但令我困惑的是数据库中有一些重复的条目,我需要从总数中拒绝这些条目。

这是我到目前为止的查询。而且,正如我所说,我知道它在几年内允许重复值。

SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding 
FROM Enrollment
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear

结果最终看起来像这样(如果我放入 WHERE 子句来限制特定学生):

YearCount   BirthYear   AcadYearEnding
1 2007 2012
2 2007 2013
1 2007 2014
1 2007 2015

这是带有生成上述数据的 WHERE 子句的查询...但我最终将删除 WHERE 子句以显示所有学生,但不会为任何学生提供重复的条目。

SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding 
FROM Enrollment
WHERE StudentId=16183
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear

鉴于我的 where 子句仅限于单个学生,我知道 2013 年条目是数据库中额外行的结果(并且不能选择清理数据,我们需要将其限制在查询)。

我尝试进行子选择来为我提供唯一学生 ID 的列表...但在 2013 年,它发现该学生 ID 两次,因此仍然计数了两次。

以下是生成错误结果的原始数据,因为 2013 年有 2 条记录:

RecId   StudentId   Birthdate   AcadYearEnding
39885 16183 11/29/2005 2012
33768 16183 11/29/2005 2013
31020 16183 11/29/2005 2013
59508 16183 11/29/2005 2014
64054 16183 11/29/2005 2015

RecId 是表的唯一标识符。

我需要的可能是以下内容(但我希望有人确认):

SELECT COUNT(YEAR(birthdate)) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding 
FROM (SELECT DISTINCT(StudentId), birthdate, AcadYearEnding From Test) As Ed
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear

最佳答案

你只想要count(distinct),我认为:

SELECT COUNT(DISTINCT StudentId) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding 
FROM Enrollment
WHERE StudentId = 100510230
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear;

当然,这在没有 WHERE 子句的情况下也有效:

SELECT COUNT(DISTINCT StudentId) as YearCount, YEAR(birthdate) as BirthYear, AcadYearEnding 
FROM Enrollment
GROUP BY AcadYearEnding
ORDER BY AcadYearEnding, BirthYear;

关于MySQL CrossTab 并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40431436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com