Чтобы получить текущий SQL для работы с использованием GROUP BY вам потребуется следующее (т.е. функция SUM агрегата): -
select NAME, SUM(BAL)
from VS, BALANCE
WHERE VS.V_ID = BALANCE.V_ID
group by NAME
Обратите внимание, что это только ваш первоначальный SQL, минимально модифицированный для работы, и он по-прежнему использует неявное соединение, которое вы закодировали. Неявные присоединяется как правило, следует избегать, а лучше использовать явное INNER JOIN .... ON синтаксисом: -
select NAME, SUM(BAL)
from VS
INNER JOIN BALANCE
ON VS.V_ID = BALANCE.V_ID
group by NAME
Если вы действительно хотите, чтобы избежать GROUP BY, то можно с помощью суб запроса, но, скорее всего, медленнее (как это эффективно должно выполнить дополнительный запрос для каждой строки тха основного запроса возвращает): -
select NAME, (SELECT SUM(BAL) FROM BALANCE WHERE BALANCE.V_ID = VS.V_ID)
from VS
EDIT, в ответ на ваш комментарий на вложенных запросах.
Корреляционные подзапросы эффективно заставляют MySQL получать набор результатов, а затем для каждой строки в результирующем наборе выполнять другой запрос. Большую часть времени они используются для получения совокупного значения (например, максимальное значение поля, связанного с строкой в возвращаемой строке, но где GROUP BY по основному запросу не будет жизнеспособным).
Например, если у вас есть список комментариев для пользователя, но на каждой строке вы хотели знать дату последнего комментария от этого пользователя вы можете сделать следующее: -
SELECT users.user_name, comments.comment_date, (SELECT MAX(comment_date) FROM comments WHERE comments.user_id = users.id) AS latest_comment_date
FROM users
INNER JOIN comments
ON users.id = comments.user_id
Это может быть написано, чтобы сделать ноны коррелировать суб запрос с использованием GROUP BY, который затем присоединился: -
SELECT users.user_name, comments.comment_date, latest_comment_date
FROM users
INNER JOIN comments
ON users.id = comments.user_id
INNER JOIN
(
SELECT user_id, MAX(comment_date) AS latest_comment_date
FROM comments
GROUP BY user_id
) sub1
ON users.id = sub1.user_id
Если вы имеете дело с большим количеством записей на пользователях это, вероятно, будет быстрее.
Однако, если вы имели дело с крошечным количеством записей на пользователях (и определение этого числа было довольно сложным), получение всех максимальных дат комментариев было бы лишними накладными расходами, и это заставило бы присоединиться к подзапросу, вряд ли будут использовать индексы.
уверены, что ваш запрос дает результат, как вы показали, так как в запросе нет суммы(). –
Любопытно, почему вы хотите избежать группового предложения? – fancyPants
Без SUM он вернет BAL из одной из строк, которая соответствует NAME (т. Е. Группе по полю). Какое значение BAL, которое он возвращает, недофинансировано. – Kickstart