【问题标题】:How do you combine and rename two field names on the same column and display the result?如何合并和重命名同一列上的两个字段名称并显示结果?
【发布时间】:2020-02-07 07:48:38
【问题描述】:

我正在尝试组合“黄色”和“蓝色”字段并将其重命名为“绿色”。然后显示每个颜色类别中的粉丝数 - 绿色红色白色。

来自数据库'House'的样本

|fan_id| Color|
---------------
   1     Yellow
   2     Red
   3     Blue 
   4     White
   5     Blue
   6     Yellow

预期结果:

|fan.id| Color|
---------------
   4     Green
   1     Red 
   1     White

这是我关于这个问题的代码;但是,它似乎仍在蓝色和黄色列上保持标签,因为我看到“0”从结果中弹出。我不确定如何获得像预期结果一样的输出。

SELECT COUNT(fan.id) AS Total,
  SUM(case when Color = "Yellow" OR Color = "Blue" then 1 else 0 end) as Green,
  SUM(case when Color = "Red" then 1 else 0 end),
  SUM(case when Color = "White" then 1 else 0 end)
FROM House
  GROUP BY Color;

输出:

'''

|Total|Green|Red|White
------------------------
 2     |   2 |  0|   0 
 1     |   0 |  1|   0  
 2     |   2 |  0|   0 
 1     |   0 |  0|   1 

【问题讨论】:

    标签: mysql sql group-by permutation


    【解决方案1】:

    你似乎想要简单的聚合:

    select 
        case when color in ('Yellow', 'Blue') then 'Green' else color end real_color,
        count(*) cnt_fans
    from house
    group by real_color
    

    【讨论】:

    • 他没有绿色,而是将蓝色和黄色定义为绿色,所以....
    • @nbk:谢谢...在阅读您的评论之前,我无法理解示例数据!
    • 我不相信这会起作用,因为“绿色”不在数据库中。我想要的是计算蓝色和黄色,但将它们的计数组合并显示为“绿色”以及“红色”和“白色”。
    • @DavidHo:是的。在 nbk 对此发表评论后,我修复了查询。
    • 这是一个正确的方法,我只需要在两个查询字段之间加一个逗号就可以让它在mysql中工作。所以最后它是这样的:选择颜色时的情况('黄色','蓝色')然后'绿色'否则颜色结束real_color,count(*)来自房屋组的cnt_fans由real_color;编辑:添加了逗号,所以现在它可以正常工作了!
    【解决方案2】:

    我会用绿色代替黄色和蓝色,然后计数

    SELECT 
      Count(*) Count1
      , Color
      FROM (SELECT REPLACE(REPLACE(COLOR,'Yellow','Green'),'Blue','Green') Color 
            From Table1) a1
      GROUP BY Color
      ORDER BY Count1 DESC
    

    here

    【讨论】:

    • 哇!你如何使用子查询来做到这一点真的很酷。非常感谢!
    • 没问题,赞成票总是被认可的,您应该将一个答案标记为有效答案
    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2021-08-23
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    相关资源
    最近更新 更多