gpt4 book ai didi

MySQL 查询根据频率选择前 50 行的子集

转载 作者:行者123 更新时间:2023-11-29 08:41:36 24 4
gpt4 key购买 nike

我有一个名为数据的表:

create table data
(
ID int primary key,
val varchar(50),
forID int

constraint fk_forID foreign key (forID) references otherTable(forID)
)

我有一个名为 dataFrequencies 的 View

create view dataFrequencies (val, freq)
as select val, COUNT(*)
from data
group by val
order by freq desc

我想要的是表 data 中的行子集哪里val位于 dataFrequencies 的前五十行中.

我当前的解决方案有些迂回。我创建了一个表 topFifty,其中包含前 50 行 dataFrequencies。然后我创建一个 View topFiftyVals,它从数据中选择除表 topFifty 上的内部联接之外的所有数据:

create table topFifty
(
val varchar(50) primary key
)

insert into topFifty select val from dataFrequencies order by frequency desc limit 50;

create view topFiftyVals (ID, val, forID)
as select *
from data d
inner join topFifty tf on d.val = tf.val

我确信有某种直接查询方法可以做到这一点!感谢您的帮助!

最佳答案

是的,有一个直接的方法。这是您的 topFiftyVals View 中的代码,稍作修改:

     select d.*, tf.freq
from data d
inner join ( select val, COUNT(*) AS freq
from data
group by val
order by freq desc
limit 50
) tf
on d.val = tf.val ;

关于MySQL 查询根据频率选择前 50 行的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13665098/

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