Я пытаюсь взять значения из столбца в одной таблице и объединить их с максимальным значением для нескольких столбцов в другой таблице, где значение первой таблицы несколько раз отображается как внешний ключ.Мне также нужно ограничить число вхождений до 1 в том, что возвращает SELECT.
Мои (упрощенные) таблицы выглядят примерно так:
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;