【问题标题】:MySql - List with Count for an Specific FieldMySql - 具有特定字段计数的列表
【发布时间】:2021-03-21 09:41:51
【问题描述】:

在列出特定字段时如何计算? 对于我的示例(在图像上),COUNT_ROWS 的预期结果应该是:

/App/RaspLot - 2;
/App/RaspLot - 2;
/Home/ePortal_Options - 2;
/Home/ePortal_Options - 2;
/Home/ePortal_Logout - 1;

下图的当前结果:

我在努力:

SELECT T.`MAIN_PATH`, A.`SUB_PATH`, T.`COUNT_ROWS`
FROM `SIDENAV` A 
INNER JOIN (
    SELECT `MAIN_PATH`,  COUNT(DISTINCT `MAIN_PATH`) AS `COUNT_ROWS` 
    FROM `SIDENAV` 
    GROUP BY `MAIN_PATH`
) T ON A.`MAIN_PATH` = T.`MAIN_PATH` 
ORDER BY `ORDER_1`, `MAIN_NAME`, `ORDER_2` ASC 

【问题讨论】:

    标签: mysql sql count subquery aggregate-functions


    【解决方案1】:

    看起来你真的只是想要聚合:

    select main_path, count(*) as count_rows
    from sidenav
    group by main_path
    order by count_rows desc, main_path
    

    如果你想要每一行的计数,你可以使用窗口函数:

    select s.*, count(*) over(partition by main_path) as count_rows
    from sidenav s
    

    这需要 MySQL 8.0。在早期版本中,您可以使用子查询执行窗口计数:

    select s.*,
        (select count(*) from sidenav s1 where s1.main_path = s.main_path) as count_rows
    from sidenav s
    

    【讨论】:

    • 这不是我需要的。我想保留整个列表,同时计算一个不同的特定字段的总数。
    • 谢谢!解决方案3)这是我真正需要的。解决方案 2) 上没有任何反应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多