如何在MySQL中获取分组计数变量的最大值
我有一个像这样的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
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