我试图从一个表中的一列中获取值,并将它们与另一个表中多个列中的最大值相结合,其中第一个表的值作为外键多次出现。我还需要将SELECT返回的次数限制为1。
我的(简化的)表如下所示:
Names: +--+------+ |PK| name| +--+------+ | 1| Fred| | 2| Bob| | 3|George| +--+------+ Values: +--+----+----+----+--+ |PK|val1|val2|val3|FK| +--+----+----+----+--+ | 1| 1| 2| 5| 2| | 2| 2| 0| 2| 1| | 3| 1| 1|NULL| 1| | 4| 7| 0|NULL| 2| | 5| 0| 3| 3| 3| | 6| 5| 2| 2| 3| | 7| 6| 3| 0| 1| | 8| 1| 2| 5| 3| | 9| 0| 2|NULL| 2| +--+----+----+----+--+
我当前的请求是:
SELECT Name.name, GREATEST(Vals.val1, COALESCE(val2, 0), COALESCE(val3, 0))
FROM Name INNER JOIN (Vals) ON Name.PK = Vals.FK;
目的是获取每个名称曾经出现的最大值。结果应类似于以下内容: 麦克斯:
+------+---+ | name|max| +------+---+ | Fred| 6| | Bob| 7| |George| 5| +------+---+
但是目前我看到的是:
+------+---+ | name|max| +------+---+ | Fred| 2| | Fred| 1| | Fred| 6| | Bob| 5| | Bob| 7| | Bob| 2| |George| 3| |George| 5| |George| 5| +------+---+
获得每次出现的名称键的平均值。我不确定是否需要'WHERE'或'GROUP BY'来解决此问题,但是每次尝试使用它时,都会遇到错误。例如:
SELECT Name.name, GREATEST(Vals.val1, COALESCE(val2, 0), COALESCE(val3, 0))
FROM Name INNER JOIN (Vals) ON Name.PK = Vals.FK GROUP BY Name.name;
SELECT Name.name, GREATEST(Vals.val1, COALESCE(val2, 0), COALESCE(val3, 0)) WHERE Vals.FK = Name.PK
FROM Name INNER JOIN (Vals) ON Name.PK = Vals.FK;
答案 0 :(得分:0)
通过聚合函数将每行将多行减少为单个值是MAX:
SELECT Name.name,
MAX(GREATEST(Vals.val1, COALESCE(val2, 0), COALESCE(val3, 0))) max
FROM Name
INNER JOIN (Vals) ON Name.PK = Vals.FK
GROUP BY Name.name;