如何在mysql中创建循环行值
我有一个名为df的表:如何在mysql中创建循环行值,mysql,loops,hive,Mysql,Loops,Hive,我有一个名为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 gender
Xiaomi Redmi Note 5A male
samsung SM-G532G female
Apple iPhone5 female
OPPO A37f male
LENOVO Lenovo A6000 male
Apple iPhone5 male
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
我想获取每行中的值,并将其放入此查询的设备代码中的select查询中:
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
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
所以我没有在上面的查询中手动输入设备代码中的每一行值。
在我上面的查询中,输出如下:
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
但我预期的结果如下:
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
我想你在找这样的东西:
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
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
我想你在找这样的东西:
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
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
您当前的查询有什么问题?您使用的是哪个版本的MySql?@TimBiegeleisen该查询没有错。我只是想把每一行的值都输入select查询,所以我没有手动输入。就像我想知道苹果Iphones5的总和一样,脚本是:选择sum(当性别=‘男性’和设备代码=‘苹果Iphones5’时,选择case,然后选择1,否则0结束)作为苹果的总和。如果我有5000种设备代码,那么有5000种选择查询。还有一种简单的方法可以解决这个问题?请添加您在上面显示的输入的预期输出。@Sergey实际上我在Hive Ambaria中使用了此查询,您当前的查询有什么问题?您使用的是哪个版本的MySql?@TimBiegeleisen此查询没有错误。我只是想把每一行的值都输入select查询,所以我没有手动输入。就像我想知道苹果Iphones5的总和一样,脚本是:选择sum(当性别=‘男性’和设备代码=‘苹果Iphones5’时,选择case,然后选择1,否则0结束)作为苹果的总和。如果我有5000种设备代码,那么有5000种选择查询。还有一种简单的方法可以解决这个问题?请添加您在上面显示的输入的预期输出。@Sergey实际上我在Hive AmbariThank youuu:中使用了此查询)输出类似于我想要的(Hank youuu:)输出类似于我想要的