在这篇文章中,我们将带领您了解按MySQL中的前N个分组的全貌,包括mysql按分组查前三条记录的相关情况。同时,我们还将为您介绍有关MSAccess选择按多个字段分组的前n个查询、mysql+更新前
在这篇文章中,我们将带领您了解按MySQL中的前N个分组的全貌,包括mysql按分组查前三条记录的相关情况。同时,我们还将为您介绍有关MS Access选择按多个字段分组的前n个查询、mysql +更新前n个、MySQL Group By,每种类型的前N个、MySQL 中取出每个分组中的前 N 条记录的知识,以帮助您更好地理解这个主题。
本文目录一览:- 按MySQL中的前N个分组(mysql按分组查前三条记录)
- MS Access选择按多个字段分组的前n个查询
- mysql +更新前n个
- MySQL Group By,每种类型的前N个
- MySQL 中取出每个分组中的前 N 条记录
按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个查询
这是该板上的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个
我有这样的查询:
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
,确认工作正常。
在您的情况下0
,LIMIT 0, 400
那是行不通的。
你不能使用下界UPDATE
的LIMIT
。
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 中有个表: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 条记录的相关知识,请在本站进行查询。
本文标签: