Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select SQL通过比较值和聚合函数结果来选择行_Select_Sqlite_Group By - Fatal编程技术网

Select SQL通过比较值和聚合函数结果来选择行

Select SQL通过比较值和聚合函数结果来选择行,select,sqlite,group-by,Select,Sqlite,Group By,我有一个表列表(gameid、playerid、team、max_minions),我想得到每个团队中拥有最低max_minions的玩家(每个团队中,每个游戏中)。也就是说,我想要每个游戏/团队组合的列表(玩家ID、团队、玩家ID和最低级别的仆从) 我试过这个: SELECT * FROM MinionView GROUP BY gameid, team HAVING MIN(max_minions) = max_minions; 不幸的是,这似乎不起作用,因为它似乎从每个可用行(gamei

我有一个表列表(gameid、playerid、team、max_minions),我想得到每个团队中拥有最低max_minions的玩家(每个团队中,每个游戏中)。也就是说,我想要每个游戏/团队组合的列表(玩家ID、团队、玩家ID和最低级别的仆从)

我试过这个:

SELECT * FROM MinionView GROUP BY gameid, team
HAVING MIN(max_minions) = max_minions;
不幸的是,这似乎不起作用,因为它似乎从每个可用行(gameid、team)中随机选择一行,然后进行比较。如果随机选择的行不匹配,则跳过该行

使用WHERE也不起作用,因为不能在WHERE子句中使用聚合函数。 限制将不起作用,因为我有更多的游戏,限制返回的总行数

有没有办法在不添加另一个包含(gameid、teamid、MIN(max_minions))的表/视图的情况下实现这一点

示例数据:

sqlite> SELECT * FROM MinionView;
gameid|playerid|team|champion|max_minions
21|49|100|Champ1|124
21|52|100|Champ2|18
21|53|100|Champ3|303
21|54|200|Champ4|356
21|57|200|Champ5|180
21|58|200|Champ6|21
64|49|100|Champ7|111
64|50|100|Champ8|208
64|53|100|Champ9|8
64|54|200|Champ0|226
64|55|200|ChampA|182
64|58|200|ChampB|15
...
预期结果(我主要关心playerid,但这里包括champion、max_仆从,以获得更好的概述):


如果有必要的话,我将在Python 3.1下使用Sqlite3。

这是在SQL Server中,希望语法也适用于您:

SELECT
    MV.*
FROM
    (
        SELECT
            team, gameid, min(max_minions) as maxmin
        FROM
            MinionView
        GROUP BY
            team, gameid
    ) groups
    JOIN MinionView MV ON
        MV.team = groups.team
        AND MV.gameid = groups.gameid
        AND MV.max_minions = groups.maxmin
换句话说,首先进行常规的分组查询(嵌套查询)。此时,您拥有每个组的最小值,但不知道它属于哪一行。为此,您与原始表连接,并匹配“键”(team、game和min)以获得其他列

请注意,如果一个团队将有多个成员具有相同的max_minions值,则将选择所有这些行。如果你只想要其中的一个,那可能会有点复杂

SELECT
    MV.*
FROM
    (
        SELECT
            team, gameid, min(max_minions) as maxmin
        FROM
            MinionView
        GROUP BY
            team, gameid
    ) groups
    JOIN MinionView MV ON
        MV.team = groups.team
        AND MV.gameid = groups.gameid
        AND MV.max_minions = groups.maxmin