gpt4 book ai didi

mysql - 从 M 组中选择前 N 行

转载 作者:可可西里 更新时间:2023-11-01 08:21:20 25 4
gpt4 key购买 nike

我有这张表:

CREATE TABLE IF NOT EXISTS `catalog_sites` (
`id` int(10) unsigned NOT NULL auto_increment,
`cat_id` int(10) unsigned NOT NULL,
`date` datetime NOT NULL,
`url` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`visited` int(10) unsigned NOT NULL,
`shown` int(10) unsigned NOT NULL,
`meta_try` int(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

我认为我的问题很简单,但似乎找不到合适的解决方案..

所以,这是一个包含网站的表格,我想获得 6 个不同类别的 6 个网站(cat_id,总计:36 行),每个类别的评分最高。评级计算为已访问/已显示

我应该得到包含 6 个热门类别的 36 行(我们可以通过使用 AVG(visited/showned) 排序找到它们),以及这 6 个类别中每个类别中的 6 个热门网站。

如果您有任何想法可能会以不同的方式发生,请告诉我。

最佳答案

这应该使用 MySQL 变量为您提供所需的内容,内部查询将预先计算访问/显示的排名,并根据您想要的条件使用排序...每个类别,最高排名...然后使用@vars 将按顺序保持@RankSeq 1-?每个类别。从该 Prequery(别名 PQ)开始,OUTER 查询仅查询 URL 的 Rank Sequence 为 <= 6

的 PreQuery

为了进一步确保您只获得前 6 个类别,内部 PreQuery 还对“TopCategories”(别名)进行了预查询/限制

select
PQ.URL,
PQ.Cat_ID,
PQ.Rank,
PQ.URLRankSeq
from
( select
CS.cat_id,
(CS.visited / CS.shown ) as Rank,
CS.url,
@RankSeq := if( @LastCat = CS.Cat_ID, @RankSeq +1, 1 ) URLRankSeq,
@LastCat := CS.Cat_ID as ignoreIt
from
( select cat_id,
avg( visited / shown )
from catalog_sites
group by 1
order by 2 desc
limit 6 ) TopCategories

JOIN catalog_sites CS
on TopCategories.Cat_ID = CS.Cat_ID,

(select @RankSeq := 0, @LastCat = 0 ) SQLVars
order by
CS.cat_id,
Rank ) PQ
where
PQ.URLRankSeq <= 6

关于mysql - 从 M 组中选择前 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com