返回表中 member_number 计数列表

Posted

技术标签:

【中文标题】返回表中 member_number 计数列表【英文标题】:Return list of member_number count in table 【发布时间】:2015-06-26 12:13:17 【问题描述】:

考虑下表

我需要按降序返回一个列表,其中包含在表where tournament = 'EPL' AND ROUND = '12' 中出现频率最高的member_nr的计数

示例

脚本应返回以下结果:

我考虑过这个问题,我的逻辑是这样写的

第 1 步:逐个获取 member_nr

 $sql = "SELECT DISTINCT * 
        FROM winners 
        WHERE tournament='$tour' AND round='$round'";
LOOP() //get 1 member number
$mem_nr = ['mem_nr']; //assign mem_nr to variable

STEP2:获取计数(次数)^ABOVE^成员编号出现在表格中

  "$sql="SELECT *, count(member_nr) as nrWins 
   FROM winners 
   where member_nr ='$memNr' and tournament='$tournament' AND     round='$round'";"
 LOOP()//get count

第 3 步:显示数据

echo $row=['nrWins'] //Display Number Wins
echo $memNr
   //END LOOP
 //END LOOP

我的问题:

以上对我来说似乎不是很有效,我正在寻找最短最有效的方法来返回上表中的成员数,欢迎任何想法/建议

【问题讨论】:

使用 count 聚合函数怎么样? (见12.16.1 GROUP BY (Aggregate) Functions) 【参考方案1】:

试试这样的:

SELECT *, COUNT(*) AS `wins`
FROM `winners`
WHERE `tournament` = '$tournament'
  AND `round` = '$round'
GROUP BY `member_nr`
ORDER BY `wins` DESC

【讨论】:

我不记得 COUNT 是在 GROUP BY 之前还是之后应用的,但请试一试。 感谢您并给您反馈 您缺少ORDER BY 以按计数降序获取结果。你应该使用count(*) 而不是count(member_nr):***.com/questions/2876909/…【参考方案2】:
select tournament,round,member_nr,count(*)
from table
where tournament = 'EPL'
and round = 12
group by tournament,round,member_nr
order by count(*) desc

【讨论】:

当您只使用WHERE 子句选择其中一个时,为什么要将roundtournament 放在GROUP BY 中? 习惯的力量.. 大多数 SQL 实现要求所有非聚合列都包含在 group by 中。虽然我认为 mysql 是这条规则的一个例外,但它们并不是真正需要的。 SELECT 中也不需要它们。

以上是关于返回表中 member_number 计数列表的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:分组和计数结果返回空列表

返回带有行计数的表列表

来自另一个类的列表框计数项目始终返回 0

左连接不返回所有结果

返回不在 Oracle 表中的提供值列表

如何在VBScript中返回具有唯一计数的数组列表