【问题标题】:Counting between two different tables Oracle在两个不同的表Oracle之间计数
【发布时间】:2021-02-24 09:55:44
【问题描述】:

我有两个 ORACLE 表,FOLDER 和 FILES。每个文件夹包含多个文件。 我正在尝试获取文件夹数量的文件数量。包含文件数量 y 的文件夹数量 x。 例如 50 个文件夹包含 10 个文件,35 个文件夹包含 8 个文件... 我可以在查询上获得一些帮助吗:

select count(fl.id_folder) ,count(fi.fileID) from FOLDER fl inner join FILES fi on fl.id_folder=fi.fileID group by fl.id_folder;

【问题讨论】:

    标签: sql oracle count inner-join aggregate-functions


    【解决方案1】:

    我们可以使用 group by 来编写查询,如下所示:

    Select cnt_files, count(1) as num_of_folders
    from
    (select fl.id_folder, count(fi.fileid) as cnt_files
      from FOLDER fl 
      Left join FILES fi on fl.id_folder=fi.fileID
    Group by fl.id_folder)
    Group by cnt_files;
    

    注意:我已使用LEFT JOIN 来考虑所有文件夹(其中包含和不包含文件)

    【讨论】:

    • 查询给出每个表的计数。但我正在寻找查询以确定我们有 50 个类别的文件夹,其中包含 20 个文件。我们有 40 个文件夹,其中包含 35 个文件等...
    • 好的。我误解了要求。
    【解决方案2】:

    您可以使用两个级别的聚合。假设表files 有一个名为id_folder 的列,你会这样做:

    select cnt_files, count(*) cnt_folders
    from (
        select count(*) cnt_files
        from files 
        group by id_folder
    ) t
    group by cnt_files
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多