【问题标题】:Count group by using mysql使用mysql计算组
【发布时间】:2012-03-23 13:50:04
【问题描述】:

我正在尝试为某些游戏统计数据制作某种“顶级”

桌子是这样的

mapname     authid  country     name    time    date    weapon  server

我有这个查询,我认为这很好(每张地图显示的最低时间)

SELECT name, min( time ) AS time
FROM kz_pro15
GROUP BY mapname ASC

我得到的结果是

name    time
Santaaa     907.75
Zimmek*     184.82
:d  34.35
waldoo  1.04
Epiphany    8.54
Lovvon  185.51
Epiphany    64.53
menqz   73.67
waldoo  93.97
KoLkkE  207.83
q[o__o]p    78.35
Ulysses gc     T! CS    154.01
sasuke FTW  151.17
sasuke FTW  41.62
Santaaa     80.38
Santaaa     196.95
JonyBu  135.56
tiBU    93.12
Santaaa     122.04
Santaaa     36.08
EzzeqL  149.14
Zeqqe   106.75
bondiO^     110.68
INJUNABLES  102.09
Sublime     72.15
Player  106.11
=(M4t1ttU)=     158.95
foo conscience  80.98
gabe    27.21
gabe    58.5

但现在我正在尝试计算结果,以获取之前列出的玩家有多少记录

gabe      2
sublime   1
player   13

【问题讨论】:

    标签: mysql sql group-by aggregate-functions


    【解决方案1】:
    SELECT name, count(*)
    FROM (
     SELECT name, min( time ) AS time
     FROM kz_pro15
     GROUP BY mapname ASC 
    ) AS x
    GROUP BY name
    

    【讨论】:

      【解决方案2】:

      除非name 依赖于mapname,否则您的查询不正确:

      SELECT name, min( time ) AS time
      FROM kz_pro15
      GROUP BY mapname ASC
      

      它会为每个mapname 显示MIN(time),但不能保证它会在最短的时间内显示相关的name

      改用这个(并注意子查询):

      SELECT k.name
           , COUNT(*) AS cnt
      FROM kz_pro15 AS k
        JOIN
          ( SELECT mapname 
                 , MIN(time) AS time
            FROM kz_pro15
            GROUP BY mapname
          ) AS g
          ON (g.mapname, g.time) = (k.mapname, k.time)
      GROUP BY k.name
      

      【讨论】:

      • 我正要提到同样的事情:)
      • @ypercube,如果我想为自定义地图名显示最佳 15 次如何...同样的问题,我有 SELECT *, min(time) FROM kz_nub15 WHERE mapname = '" .$map."' GROUP BY name ASC ORDER BY time ASC LIMIT 15 但是 min(time) 这不是确切的值
      • 如果您想要特定地图名称的最佳 15 次,您不需要 GROUP BY nameMIN(time),对吗?
      • 或者您的意思是,对于特定地图名称,每个名称显示最佳 15 次?
      • @ypercube 准确地说,地图名称的最佳 15 次,但只显示名称的最佳时间
      【解决方案3】:

      选择 姓名, min( 时间 ) 作为时间, count(*) AS 记录 来自 kz_pro15 按名称 ASC 分组

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多