【问题标题】:an issue regarding mysql关于mysql的一个问题
【发布时间】:2020-04-03 17:31:07
【问题描述】:

执行以下 MySQL 查询时:

$sql = "SELECT username,wordpermin FROM user_records GROUP BY(username) ORDER BY wordpermin DESC LIMIT 20";

我面临的问题如下:

我正在为网站制作一个表格,我想向其中显示word-per-min 计数最高的用户。然而这个计数是方式,因为我使用GROUP BY(username)。它不会给我该用户名的最高值,而是给我它看到的第一个值。

我的预期结果是:20 个用户,按照每分钟字数、每秒字数的顺序,总共有 20 个唯一用户。独特,因为我不希望每分钟拥有第一和第二高单词的用户显示两次。只需显示最高记录并将其放在第一位即可。

【问题讨论】:

  • 请阅读How to Ask。这应该从对您的数据模型的正确解释开始,理想情况下包括一些示例数据,并据此显示输出的错误程度。

标签: php mysql


【解决方案1】:

您必须对该列 wordpermin 使用 MAX() 聚合函数并按降序排序:

SELECT username, MAX(wordpermin) maxword 
FROM user_records 
GROUP BY username 
ORDER BY maxword DESC LIMIT 20

【讨论】:

    【解决方案2】:

    我会这样做(如果我的实现允许的话)。根据最适合您的目的输入“SUM() 或 COUNT()(我无法从您的段落中看出)。

    $sql = 
    "
    select username
    from (
          SELECT   username
                 , sum(wordpermin) as wordpermin
          FROM user_records 
          GROUP BY(username) 
          ORDER BY wordpermin DESC LIMIT 20
          )
    order by wordpermin desc desc limit 20
    "
    

    【讨论】:

    • 这不起作用它什么也没显示!!让我解释一下,原谅我的英语不好,我试图在我的网站上创建一个表格,显示每个唯一用户的最高 'wordpermin' 所以如果用户有第一和第二高的 'wordpermin' 我只希望他是第一个不是第二个,我希望我说清楚了吗?意思是只向用户展示一次他/她最高的“wordpermin”,我希望该表只有 20 个用户。
    • 好的,这有点帮助。您的 SQL 版本是否有“MAX()”或“PARTITION”?因此,如果可能,您将要进行分区,然后在用户名上的分区内使用 max() 函数来查找每个用户的最大值。在此之后,像我在上面所做的那样使用“GROUP BY”嵌套来“限制 20”。
    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多