用不同的位置创建行
Creating row with different where
我有这段代码可以获取列表中所有项目的用户数和平均水平。
select itemId,count(c.characterid) as numberOfUse, avg(maxUpgrade) as averageLevel
from items i inner join characters c on i.characterId=c.characterId
where itemid in (22001,22002,22003,22004,22005,22006,22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22030,22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,22050,22051,22052,22053,22054,22055,22056,22057,22058,22059,22060,22070,22071,22072,22073,22074,22075,22076,22077,22085,22086,22087,22091,22092)
and attached>0
group by itemId
确实是为符文id创建一行,一行为用户数量,一行为升级它的平均水平的人,它为所有服务器的玩家做。
我想每 10 级创建一个新列以每 10 级有一个统计数据,这样我就可以根据玩家级别查看更常用的项目。项目级别取决于级别,所以我对 select 只有特定级别的方法是使用 WHERE itemid>0 and itemid<10
,我每 10 个级别执行一次,复制数据,并将它们推送到 [=23] =] sheet.
所以我想要一个包含列的结果:
itemid use_1-10 avg_level_1-10 use_11-20 avg_level_21-30 etc...
所以我可以一次复制所有结果,而不必重复相同的过程 15 次。
如果我没听错,你可以进行条件聚合。假设“级别”存储在 table characters
的 level
列中,您将执行:
select i.itemId,
sum(case when c.level between 1 and 10 then 1 else 0 end) as use_1_10,
avg(case when c.level between 1 and 10 then maxUpgrade end) as avg_level_1_10,
sum(case when c.level between 11 and 20 then 1 else 0 end) as use_11_20,
avg(case when c.level between 11 and 20 then maxUpgrade end) as avg_level_11_20,
...
from items i
inner join characters c on i.characterId = c.characterId
where i.itemid in (...) and attached > 0
group by i.itemId
注意:考虑在 where
子句中为列 attached
添加它所属的 table 前缀,以避免歧义。
我有这段代码可以获取列表中所有项目的用户数和平均水平。
select itemId,count(c.characterid) as numberOfUse, avg(maxUpgrade) as averageLevel
from items i inner join characters c on i.characterId=c.characterId
where itemid in (22001,22002,22003,22004,22005,22006,22007,22008,22009,22010,22011,22012,22013,22014,22015,22016,22030,22031,22032,22033,22034,22035,22036,22037,22038,22039,22040,22041,22042,22050,22051,22052,22053,22054,22055,22056,22057,22058,22059,22060,22070,22071,22072,22073,22074,22075,22076,22077,22085,22086,22087,22091,22092)
and attached>0
group by itemId
确实是为符文id创建一行,一行为用户数量,一行为升级它的平均水平的人,它为所有服务器的玩家做。
我想每 10 级创建一个新列以每 10 级有一个统计数据,这样我就可以根据玩家级别查看更常用的项目。项目级别取决于级别,所以我对 select 只有特定级别的方法是使用 WHERE itemid>0 and itemid<10
,我每 10 个级别执行一次,复制数据,并将它们推送到 [=23] =] sheet.
所以我想要一个包含列的结果:
itemid use_1-10 avg_level_1-10 use_11-20 avg_level_21-30 etc...
所以我可以一次复制所有结果,而不必重复相同的过程 15 次。
如果我没听错,你可以进行条件聚合。假设“级别”存储在 table characters
的 level
列中,您将执行:
select i.itemId,
sum(case when c.level between 1 and 10 then 1 else 0 end) as use_1_10,
avg(case when c.level between 1 and 10 then maxUpgrade end) as avg_level_1_10,
sum(case when c.level between 11 and 20 then 1 else 0 end) as use_11_20,
avg(case when c.level between 11 and 20 then maxUpgrade end) as avg_level_11_20,
...
from items i
inner join characters c on i.characterId = c.characterId
where i.itemid in (...) and attached > 0
group by i.itemId
注意:考虑在 where
子句中为列 attached
添加它所属的 table 前缀,以避免歧义。