【问题标题】:How to create loop row values in mysql如何在mysql中创建循环行值
【发布时间】:2019-09-10 04:50:12
【问题描述】:

我有一张名为 df 的表:

device_code             gender
Xiaomi Redmi Note 5A    male
samsung SM-G532G        female
Apple iPhone5           female
OPPO A37f               male
LENOVO Lenovo A6000     male
Apple iPhone5           male

我想在每一行中获取值并放入此查询的 device_code 中的选择查询:

select log10(total_redmi / total_male) as lmp_redmi
from (
         select sum(case
                        when gender = 'male' and device_code = 'Xiaomi Redmi Note 5A' then 1
                        else 0 end)                                                     as total_redmi,
                sum(case when gender = 'male' and gender is not null then 1 else 0 end) as total_male
         from df) x 

所以我没有在上面的查询中手动输入 device_code 中的每一行值。 在我上面的查询中,输出如下:

lmp_redmi     lmp_SMG532G   ... etc
-0,602059991    0        

但我希望输出是这样的:

                                  lmp   
Xiaomi Redmi Note 5A    -0,602059991    
samsung SM-G532G         0              
Apple iPhone5,3         -0,602059991    
OPPO A37f               -0,602059991    
LENOVO Lenovo A6000     -0,602059991    

【问题讨论】:

  • 您当前的查询有什么问题?
  • 你用的是哪个版本的MySql?
  • @TimBiegeleisen 查询没有错。我只想将每一行的值都放入选择查询中,所以我没有手动输入。就像我想知道 Apple Iphones5 的总和,那么脚本是:选择总和(当性别 = 'male' 和 device_code = 'Apple Iphones5' 然后 1 else 0 end)作为 total_apple。如果我有 5000 种 device_code,那么就有 5000 个选择查询。还有另一种简单的方法可以解决这个问题吗?
  • 请添加您在上面向我们展示的输入的预期输出。
  • @Sergey 实际上我在 Hive Ambari 中使用了这个查询

标签: mysql loops hive


【解决方案1】:

我想你正在寻找这样的东西:

select *, case when total_device_male > 0
               then log10(total_device_male/total_male)
          end as lmp_redmi
from (
  select device_code, sum(case when gender = 'male' then 1 else 0 end) as total_device_male,
    (select count(*) from df where gender = 'male') as total_male
  from df
  group by device_code
)x

【讨论】:

  • 谢谢你 :) 输出就像我想要的那样
猜你喜欢
  • 1970-01-01
  • 2020-09-16
  • 2012-02-28
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
相关资源
最近更新 更多