如何在MySQL中获取分组计数变量的最大值

如何在MySQL中获取分组计数变量的最大值,mysql,Mysql,我有一个像这样的MySQL表 recordID| netcall | sign | activity | netid 1 | group1 | wa1 | 1 | 20 2 | group2 | wa2 | 2 | 30 3 | group1 | wa2 | 1 | 20 4 | group2 | wa3 | 2 | 30 5 | gr

我有一个像这样的MySQL表

recordID| netcall    | sign | activity | netid
1       | group1     | wa1  | 1        | 20
2       | group2     | wa2  | 2        | 30
3       | group1     | wa2  | 1        | 20
4       | group2     | wa3  | 2        | 30
5       | group1     | wa1  | 1        | 40
6       | group3     | wa4  | 3        | 50
7       | group3     | wa4  | 3        | 50
8       | group1     | wa2  | 1        | 40
9       | group1     | wa1  | 1        | 40
10      | group2     | wa4  | 2        | 60
我需要的是:

Netcall | count | activity | netid
Group1  | 3     | 1        | 40
Group2  | 2     | 2        | 30
Group3  | 2     | 3        | 50
我想我可以

SELECT MAX(xx.mycount) AS MAXcount
  FROM (SELECT COUNT(tt.sign) AS mycount ,tt.activity
        FROM NetLog tt
       WHERE ID <> 0
       GROUP BY netcall) xx

但这只带来了未被netcall细分的总数。我没有看到这个问题的例子,但我肯定有一个,我只是问错了;它甚至在MySQL手册中有自己的章节,但无论如何

SELECT a.netcall
     , b.total
     , a.activity
  FROM netlog a
  JOIN
     ( SELECT netcall 
            , MAX(record_id) record_id
            , COUNT(*) total
         FROM netlog 
        GROUP 
           BY netcall 
    ) b
   ON b.netcall = a.netcall
  AND b.record_id = a.record_id

您的示例和愿望输出太基本,您应该尝试扩展,以便包含更多案例

现在,您可以通过以下方式获得所需输出:

SELECT `netcall`, COUNT(*) as `total`, MAX(`activity`) as `activity`
FROM t
GROUP BY `netcall`;
我猜你们可以为小组安排不同的活动,所以你们需要多个步骤

通过netcall计算GROUP的计数,活动我称之为q 然后看看每个网络呼叫的最大总数是多少,我称之为p 现在,当您拥有所有计数时重用q,所以只需选择具有最大计数的一个。 在MySQL v8+中,您可以使用cte和窗口函数来简化一点

with group_count as (
  SELECT `netcall`, COUNT(*) as total, `activity`        
  FROM t
  GROUP BY `netcall`, `activity`
), group_sort as (
  SELECT `netcall`, total, `activity`, 
          RANK() OVER (PARTITION BY `netcall`, `activity` ORDER BY total DESC) as rnk
  FROM group_count
)  
SELECT *
FROM group_sort
WHERE rnk = 1

期望结果的最大值在哪里?从样本数据来看,似乎所有组1都有相同的活动1,所有组2都有相同的活动2,所有组3都有相同的活动3。是这样吗?您的表没有ID或0,请解释组的逻辑和结果。您的mysql版本是什么?为什么不这样做:通过netcall从NetLog group中选择COUNTsign、MAXactivity?您可能错过了一个连接where@JuanCarlosOropeza很高兴看到有人注意到了!请注意,在示例输出中,计数是每个组netcall中有多少符号wa1、wa2等。第一组有5个,第二组有3个,依此类推。我问的问题不对,我道歉。请查看我的表格数据并再次输出我已编辑的数据。我需要每个netcalls基于netid的最大计数。或者每个组的哪个netid的计数最高?你还没有回答我关于评论的问题。你们的MySQL版本是什么?你们可以为小组安排多个活动吗?你们如何处理这些活动?你是怎么处理领带的?我要赞扬胡安·卡洛斯·奥罗佩扎,他带领我找到了解决办法。我不得不改变其中一个变量,但通过这样做,他的解决方案,第一个与连接是什么,最终工作。我还没有MySQL 8或更高版本。
with group_count as (
  SELECT `netcall`, COUNT(*) as total, `activity`        
  FROM t
  GROUP BY `netcall`, `activity`
), group_sort as (
  SELECT `netcall`, total, `activity`, 
          RANK() OVER (PARTITION BY `netcall`, `activity` ORDER BY total DESC) as rnk
  FROM group_count
)  
SELECT *
FROM group_sort
WHERE rnk = 1
    SELECT k.netcall, k.netID,  MAX(k.logins) highest, 
AVG(k.logins) average, netDate, activity
                          FROM
                            (SELECT netID, netcall, COUNT(*) logins, DATE(`logdate`) as netDate, activity
                               FROM NetLog
                              WHERE netID <> 0 AND status = 1
                                AND netcall <> '0' AND netcall <> ''
                              GROUP BY netcall, netID) k
                            GROUP BY netcall  
                            ORDER BY highest DESC 
Net Call    Highest Average Net ID  Sub Net Of...   ICS
214   309   Map Date    Activity
MESN    65  41.5294 339     214     309 MAP 2017-09-03  MESN
W0KCN   34  14.9597 1       214     309 MAP 2016-03-15  KCNARES Weekly 2m Voice Net
W0ERH   31  31.0000 883     214     309 MAP 2018-10-12  Johnson Co. Radio Amateurs Club Meeting Net
KCABARC 29  22.3333 57      214     309 MAP 2016-10-10  KCA Blind Amateurs Weekly 2m Voice Net