Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql-按计数选择行组?_Mysql - Fatal编程技术网

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'