在网站上搜索了几个小时后,我无法找到正确的答案来解决问题,或者答案很复杂。 我有一些统计数据,来自minecraftserver,我想知道哪些块是由谁创建的。所以我开始使用GROUP BY和MAX,但它没有返回正确的值。 MAX值是好的,但它与itemid和playerid冲突。它只是选择第一个id和玩家名称。 (注:每个playerid有一个单独的一行为每个项目!!!)查询是如下:MAX和GROUP BY不会返回好值
SELECT `playername` , `itemid` , MAX(destroyed)
FROM `blockstats_typed`
GROUP BY `itemid`
LIMIT 0 , 30
是有playername字段,ITEMID,创建和销毁。我希望你们能帮助我...
如果你需要更多信息,就这么说!
编辑1(表模式):
id int(10) id of the row (AI)
playername varchar(50) playername
itemid smallint(5) id of the item
created int(10) times created
destroyed int(10) times destroyed
您还需要通过'playername'进行分组。我很惊讶,没有错误。 –
只有MySQL(和PostgreSQL,但以更有限的方式)允许您省略选择列表中但不包含聚合的GROUP BY子句中的列(表达式)。如果你想要项目ID,它被销毁的最大次数,以及这样做的用户ID(或ID),你必须编写一个更复杂的查询。 –
@JonathanLeffler:SQLite会让MySQL“挑一个随机的”东西,PostgreSQL让你逃脱它,如果你是由PK分组和使用版本9.1+(AFAIK都)。 –