【问题标题】:mysql - how to sum the count of 2 different elements from the same table and column and show it as one?mysql - 如何将来自同一个表和列的 2 个不同元素的计数相加并将其显示为一个?
【发布时间】:2020-05-28 13:52:23
【问题描述】:

我有一个包含不同类型文学流派的图书馆,我必须将其展示为一个,其中一些与其他流派非常相似,因此我被要求通过将某些流派的数量和比重与相似流派相加来减小表格大小,例如:

自传必须总结为传记,冒险与行动,浪漫与浪漫喜剧。

检查小提琴示例:http://sqlfiddle.com/#!9/df7c87/9

我需要将其显示为以下示例:

╔════════════════╦════════════╦══════════╦══════════════════╦════════════════╦══════════════╦════════════╗
║ Literary_Genre ║ Day_Amount ║ Day_Porc ║ Yesterday_Amount ║ Yesterday_Porc ║ Month_Amount ║ Month_Porc ║
╠════════════════╬════════════╬══════════╬══════════════════╬════════════════╬══════════════╬════════════╣
║ Biography      ║ 4          ║ 28,56    ║ 2                ║ 31             ║ 27           ║ 35.9       ║
╠════════════════╬════════════╬══════════╬══════════════════╬════════════════╬══════════════╬════════════╣
║ romance        ║ 6          ║ 42,84    ║ 1                ║ 22,6           ║ 56           ║ 61,1       ║
╠════════════════╬════════════╬══════════╬══════════════════╬════════════════╬══════════════╬════════════╣
║ Action         ║ 1          ║ 7,14     ║ 4                ║ 28,56          ║ 38           ║ 45.1       ║
╚════════════════╩════════════╩══════════╩══════════════════╩════════════════╩══════════════╩════════════╝

基本上我需要将动作+冒险的数量相加并将其显示为冒险考虑时间间隔,并为自传+传记和浪漫喜剧+浪漫做同样的事情。

ps:百分比数字是随机生成的,因为我没有计算。

【问题讨论】:

    标签: mysql join sum left-join case


    【解决方案1】:

    您可以使用聚合和case 表达式:

    select
        case Literary_Genre 
            when 'Autobiography' then 'Biography'
            when 'romantic comedy' then 'romance'
            when 'Adventure' then 'Action'
            else Literary_Genre 
        end Real_Literary_Genre,
        sum(Day_Amount) Day_Amount,
        sum(Day_Porc) Day_Porc,
        sum(Yesterday_Amount) Yesterday_Amount,
        sum(Yesterday_Porc) Yesterday_Porc,
        sum(Month_Amount) Month_Amount
        sum(Month_Porc) Month_Porc
    from mytable t
    group by Real_Literary_Genre
    

    如果要映射大量类别,最好创建一个表来存储这些信息:

    original_genre    | real_genre
    ----------------- | ----------------
    Autobiography     | Biography
    romantic comedy   | romance
    Adventure         | Action
    

    然后您可以通过left join 将其带入:

    select
        coalesce(m.real_genre, t.Literary_Genre) New_Literary_Genre,
        sum(Day_Amount) Day_Amount,
        sum(Day_Porc) Day_Porc,
        sum(Yesterday_Amount) Yesterday_Amount,
        sum(Yesterday_Porc) Yesterday_Porc,
        sum(Month_Amount) Month_Amount
        sum(Month_Porc) Month_Porc
    from mytable t
    left join mymapping m on m.original_genre = t.Literary_Genre
    group by New_Literary_Genre
    

    【讨论】:

    • 表的想法是一个非常好的想法,问题是我无法访问数据库结构来进行这种更改。不过谢谢!你的回答真的很有帮助!
    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多