【问题标题】:Finding the most active video maker within multiple tables(SQLite)在多个表中查找最活跃的视频制作者(SQLite)
【发布时间】:2021-01-16 14:57:59
【问题描述】:

我如何才能找到最活跃的视频制作者的initials,即仅使用一个查询就制作了最多视频的制作者?

CREATE TABLE IF NOT EXISTS Videos (
    title TEXT PRIMARY KEY,
    video_description TEXT NOT NULL,
);

CREATE TABLE IF NOT EXISTS VideosMaker (
    full_name TEXT PRIMARY KEY NOT NULL,
    initials TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS VideosMaker_Videos (
    video_title TEXT NOT NULL,
    video_maker_name TEXT NOT NULL,

    PRIMARY KEY (video_title, video_maker_name),
    FOREIGN KEY (video_title) REFERENCES Videos(title),
    FOREIGN KEY (video_maker_name) REFERENCES VideosMaker(full_name)
);

注意: 保证只有一个 video_maker 贡献了最大数量的新闻项目。 对于这个问题,foreign_keys 是 ON

【问题讨论】:

    标签: sql sqlite count subquery sql-order-by


    【解决方案1】:

    你不关心关系,所以order bylimit在这里就足够了。

    一种选择是使用计算每个制作者的视频计数的相关子查询进行排序:

    select vm.initials
    from videosmaker vm
    order by (
        select count(*) 
        from videosmaker_videos vmv 
        where vmv.video_maker_name = vm.full_name
    ) desc limit 1
    

    此查询应利用videosmaker_videos(video_maker_name) 上的索引。

    您也可以加入聚合子查询

    select vm.initials
    from videosmaker vm
    inner join (
        select video_maker_name, count(*) cnt 
        from videosmaker_videos 
        group by video_maker_name
    ) vmv on vmv.video_maker_name = vm.full_name
    order by vmv.cnt desc limit 1
    

    【讨论】:

      【解决方案2】:

      您可以通过此查询获取制作视频最多的视频制作者的名称:

      SELECT video_maker_name
      FROM VideosMaker_Videos
      GROUP BY video_maker_name
      ORDER BY COUNT(*) DESC LIMIT 1
      

      要获得首字母,您必须将其用作 WHERE 子句中的子查询:

      SELECT initials
      FROM VideosMaker
      WHERE full_name = (
        SELECT video_maker_name
        FROM VideosMaker_Videos
        GROUP BY video_maker_name
        ORDER BY COUNT(*) DESC LIMIT 1
      )
      

      【讨论】:

      • 嗯...这有点奇怪,我发送它的平台说我有非零退出状态:9.我知道它可能有很多原因,但我可以修改这个行`ORDER BY COUNT(*) DESC LIMIT 1`到别的东西? @forpas
      • @EsmerOmer 检查这个:dbfiddle.uk/… 查询使用有效的标准 SQL 代码。
      • 完成了,我写错了。我大部分都写了和你说的一样的查询,但我不太确定最后一部分,GROUP BY 和 ORDER BY。我已经解决了这个问题,我将记录更多关于它们的信息。感谢您的宝贵时间!
      猜你喜欢
      • 2014-02-22
      • 2022-08-16
      • 1970-01-01
      • 2011-11-27
      • 2014-08-19
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2013-06-11
      相关资源
      最近更新 更多