GVKun编程网logo

按MySQL中的前N个分组(mysql按分组查前三条记录)

11

在这篇文章中,我们将带领您了解按MySQL中的前N个分组的全貌,包括mysql按分组查前三条记录的相关情况。同时,我们还将为您介绍有关MSAccess选择按多个字段分组的前n个查询、mysql+更新前

在这篇文章中,我们将带领您了解按MySQL中的前N个分组的全貌,包括mysql按分组查前三条记录的相关情况。同时,我们还将为您介绍有关MS Access选择按多个字段分组的前n个查询、mysql +更新前n个、MySQL Group By,每种类型的前N个、MySQL 中取出每个分组中的前 N 条记录的知识,以帮助您更好地理解这个主题。

本文目录一览:

按MySQL中的前N个分组(mysql按分组查前三条记录)

按MySQL中的前N个分组(mysql按分组查前三条记录)

问题很多,但我似乎找不到与我遇到的情况相匹配的问题。我想在前n个查询中执行一些分组。我的数据看起来像这样(显然是假值)。

MY_DATE    IP_ADDRESS
1/1/09     999.999.999.999
1/1/09     999.999.999.999
1/1/09     999.999.999.998
... a lot more rows

该表的日期范围涵盖数月,每月有数千行。我想做的是一个查询,告诉我哪个IP地址出现在每个月中最频繁。我可以使用以下方法完成一个月的操作:

SELECT DATE_FORMAT(MY_DATE,'%b-%y') AS "MONTH",IP_ADDRESS,COUNT(*) AS HITS
FROM MY_DATA
WHERE DATE_FORMAT(MY_DATE,'%b-%y') = 'JAN-09'
GROUP BY DATE_FORMAT(MY_DATE,'%b-%y'),IP_ADDRESS
ORDER BY HITS DESC
LIMIT 10

但是我真正想要的是能够看到数据集中每个月的前n个。从本质上讲,这禁止了我使用我指定的where子句。当然,当我这样做的时候,我在所有月份中的分数都达到10。我正在寻找的结果应如下所示:

MONTH    IP_ADDRESS        COUNT(*)
JAN-09   999.999.999.999   200
JAN-09   999.999.999.998   150
... ( 8 more rows of January )
FEB-09   999.999.999.999   320
FEB-09   999.999.999.998   234
... ( 8 more rows of February)
MAR-09   999.999.999.999   440
... ETC.

可以在MySQL中完成吗?我遇到的障碍似乎是MySQL不允许UNION中包含的查询语句中的ORDER BY。谢谢您的帮助!

MS Access选择按多个字段分组的前n个查询

MS Access选择按多个字段分组的前n个查询

这是该板上的peterm已解决的问题的第2部分。再次感谢peterm!

因此,我有一些代码可以返回给定学生的前3个测试成绩。我的表如下所示:

StudentID, Test ID, Score
1,1, 95
1, 2, 90
1, 3, 90
1, 4, 90
2, 1, 99
2, 2, 95
2, 3, 90
2, 4, 90

感谢peterm,我有以下代码可以为我做到这一点:

SELECT StudentID, TestID, TestScore  FROM MyTable t WHERE TestID IN(  SELECT TOP 3 TestID     FROM MyTable   WHERE StudentID = t.StudentID    ORDER BY TestScore DESC, TestID) ORDER BY StudentID, TestScore DESC, TestID;

我的新问题是现在我需要在表中为“科目”和“年份”添加两个新字段,因此我需要找到每个“科目-学生-年”组合的前3个分数。一旦我获得了每种组合的前3个分数,就需要对它们进行平均,这样我就可以获得每个学生-学科年组合的前3个分数中的一个平均分数。希望我已经足够清楚地解释了这一点,而不必模拟另一个表。

提前致谢。

答案1

小编典典

你可以做这样的事情

SELECT StudentID, Year, Subject,  AVG(TestScore) AS AvgScore  FROM(  SELECT StudentID, Year, Subject, TestScore   FROM MyTable t   WHERE TestID IN  (   SELECT TOP 3 TestID      FROM MyTable    WHERE StudentID = t.StudentID      AND Year = t.Year      AND Subject = t.Subject    ORDER BY TestScore DESC, TestID  )) q GROUP BY StudentID, Year, Subject ORDER BY StudentID, Year, Subject;

样本输出:

| STUDENTID | YEAR | SUBJECT | AVGSCORE ||-----------|------|---------|----------||         1 | 2012 |       1 |       91 ||         1 | 2012 |       2 |       84 ||         2 | 2012 |       1 |       94 ||         2 | 2012 |       3 |       95 |

mysql +更新前n个

mysql +更新前n个

我有这样的查询:

update  tableset     status = 1where   status = 2;

但是我只想对前400名进行此操作。我尝试添加“ limit 0,400”(就像我在查询中那样),但这没有用。我进行了一些搜索,而mysql似乎不像SQL
Server那样支持TOP(n)命令。

知道我该怎么做吗?

编辑:为了将来参考,我使用以下样式进行选择,效果很好:

select  * from    tablewhere   ... limit 0, 400;

但无论出于何种原因,在更新中它都不会与“ 0”一起使用。我会认为这种不一致和模棱两可的行为,但是哦。

答案1

小编典典
UPDATE  tableSET     status = 1WHERE   status = 2ORDER BY idLIMIT 400

签入MySQL 5.2.0-falcon-alpha-community-nt-log,确认工作正常。

在您的情况下0LIMIT 0, 400那是行不通的。

你不能使用下界UPDATELIMIT

MySQL Group By,每种类型的前N个

MySQL Group By,每种类型的前N个

我有一张这样的桌子:

等级信
1个
2个
3个
4个
5℃
6个
7℃
8℃
9号
10摄氏度

我需要按升序排列每个字母的前2个:

等级信
1个
2个
3个
5℃
7℃
9号

我该怎么办?使用GROUP BY获得前1名非常简单,但是我似乎无法让它适用于多个条目

MySQL 中取出每个分组中的前 N 条记录

MySQL 中取出每个分组中的前 N 条记录

mysql 中有个表:article(字段:id,type,date),type 有 1-10,10 种类型。现在要用 SQL 找出每种类型中时间最新的前 N 个数据组成的集合。这是在网上看到的,记录一下以供自己学习

select a1.* from article a1

inner join

(select a.type,a.date from article a left join article b

on a.type=b.type and a.date<=b.date 

group by a.type,a.date

having count(b.date)<=2

)b1

on a1.type=b1.type and a1.date=b1.date

order by a1.type,a1.date desc

注:上面 sql 语句中的 2 代表的就是前面提到的 N。 如果表名为关键字需要用 Esc 下面的按键处理

今天的关于按MySQL中的前N个分组mysql按分组查前三条记录的分享已经结束,谢谢您的关注,如果想了解更多关于MS Access选择按多个字段分组的前n个查询、mysql +更新前n个、MySQL Group By,每种类型的前N个、MySQL 中取出每个分组中的前 N 条记录的相关知识,请在本站进行查询。

本文标签: