mysql-按计数选择行组?
给出一个表格,显示组织成员获得的奖项,我试图列出在给定日期后获得三个或三个以上奖项的所有成员,并列出这些成员获得的所有奖项。我有一个查询将正确列出成员,但它只显示每个成员一行,我正在尝试查看他们的所有奖励 表中有一行显示了任何成员获得的每个奖励(“奖励”),以及奖励类型和获得日期(“奖励日期”) 以下是我所拥有的:mysql-按计数选择行组?,mysql,Mysql,给出一个表格,显示组织成员获得的奖项,我试图列出在给定日期后获得三个或三个以上奖项的所有成员,并列出这些成员获得的所有奖项。我有一个查询将正确列出成员,但它只显示每个成员一行,我正在尝试查看他们的所有奖励 表中有一行显示了任何成员获得的每个奖励(“奖励”),以及奖励类型和获得日期(“奖励日期”) 以下是我所拥有的: SELECT Membername, Award, Awarddate,COUNT(Membername) FROM awards WHERE Awarddate > '2
SELECT Membername, Award, Awarddate,COUNT(Membername)
FROM awards
WHERE Awarddate > '2011-06-30'
GROUP BY Membername HAVING COUNT(Membername) > 2
建议?您可以使用聚合功能:
SELECT Membername
, COUNT(*) AS NumberOfAwards
, GROUP_CONCAT(Award ORDER BY Awarddate) AS Awards
, GROUP_CONCAT(Awarddate ORDER BY Awarddate) AS AwardDates
FROM awards
WHERE Awarddate > '2011-06-30'
GROUP BY Membername
HAVING COUNT(*) > 2
编辑:要仅列出给定日期后获得的奖励,请按照ypercube的建议在此查询中再添加一行:
WHERE a.Awarddate > '2011-06-30'
您的表的唯一标识符是什么?是会员名称、获奖日期和奖项的组合吗?还是有一个单独的ID?非常好,在一行上显示所有奖项。但是假设我想保留“每行一个奖项”的格式,这样用户就可以看到每个奖项的日期。那会是什么样子?如果你想让每个奖项都排在一行,你可以使用@piotrm的答案。我想你还需要在外部查询中使用
WHERE a.Awarddate>“2011-06-30”
。我运行了这个查询,结果是有效的,除了WHERE子句不起作用-它显示了所有奖项,包括2011-06-30之前的奖项。是什么原因造成的?哎呀,刚才看到了ypercube的反应——就是这样。太好了,谢谢!谢谢各位,这正是我所需要的!
WHERE a.Awarddate > '2011-06-30'