Dúvida com SELECT

Tenho as seguintes Tabelas:

TABELA SUPERVISOR
id
nome

TABELA PEDIDOS
id
id_supervisor
data
valor

Preciso retornar apenas um registro por supervisor com os seguintes dados:
id_supervisor
nome
valor (soma dos valores dos pedidos)

Tentei fazer assim:

SELECT pedidos.id_supervisor, s.nome, (SELECT SUM(valor) FROM pedidos WHERE pedidos.id_supervisor = s._id) AS valor FROM pedidos " + INNER JOIN supervisor s ON s._id = pedidos.id_supervisor WHERE data BETWEEN 'data1' AND 'data2'

Acontece que ele me retorna mais de um registro por supervisor…

Não precisa fazer o sub-select. Basta fazer a join estre as tabelas e selecionar id_supervisor, sum(valor). Porém, nestes tipos de query você não pode esquecer de cláusula GROUP BY, que deve vir depois do where. Nesta cláusula você deve listar os campos que serão agrupados. Geralmente são todos aqueles que não possum uma função do tipo sum(), count() , avg()

Fiz assim:
SELECT pedidos.id_supervisor, s.nome, SUM(valor) AS valor FROM pedidos INNER JOIN supervisor s ON s._id = pedidos.id_supervisor WHERE data BETWEEN '2015-11-01' AND '2015-11-30' GROUP BY id_supervisor

Como funciona o GROUP BY?
O que acontece se eu agrupar mais de um campo?

Faltou colocar o campo s.nome no GROUP BY. Ele serve justamente para fazer esse tipo de sumarização. Se você não coloca o GROUP BY, ele vai repetir a soma para cada linha da JOIN. Na prática, a soma não teria efeito. Ele serve justamente para aglutinar várias linhas em uma.

Se eu colocar apenas o id_supervisor no GROUP BY, ele não vai agrupar pelo id_supervisor, juntando todos os registros de id_supervisor iguais em apenas um? Porque preciso também do s.nome?

Nesse caso vai dar certo porque para cada id tem apenas um nome, mas se você não coloca os campos, as linhas podem ficar repetidas.

Entendi, então agrupo com mais de um campo quando ocorrer de algum campo do select ser diferente?