Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Seguinte eu preciso criar uma view que traga os dados do usuario e o total de pontos acumulado
para isso eu tenho uma tabela que guarda os pontos (positivos e negativos)
e tenho minha tabela que guarda todos os usuários
SELECT (SELECT SUM(pontos_positivos) FROM pontos WHERE id = 10) as totalPontos, nome, email FROM usuarios WHERE id = 10
Bom até ai muito simples pois eu passo a condição 'id' mas e quero criar uma view que guarde direto todos os usuarios e seus pontos
e n tenho um ID ou seja preciso listar todos... eu tentetei fazer.. mas sem passar condição na hora do SUM ele soma todos os pontos de todos os usuários... alguém sabe como me ajudar?
sim como eu falei eu quero essa condição montada dentro de outro SQL
SELECT (SELECT * FROM PONTOS) FROM pessoas
são duas tabelas e um INNNER JOIN tabm n resolveria
como dentro de outra sql?
SELECT (SELECT SUM(pontos) FROM pontos) as total de pontos FROM usuários
isso já funciona só que quero passar uma condição (id do usuario) do sql de fora para dentro..
Não há porque você não utilizar joins. Mas já que você só quer passar o id para a subquery, é simples.
Defina um alias na query principal, e utilize-o na subquery. Utilizarei usuarioid para explanar que é o ID do usuário
SELECT
(SELECT SUM(pontos) FROM pontos WHERE usuarioid = U.id) AS pontos
FROM
usuarios A
Não é necessário definir um alias na subquery. Mas você muito bem pode fazer com JOIN:
SELECT
U.nome,
SUM(P.pontos) AS pontos
FROM
usuarios U
INNER JOIN pontos P ON (P.usuarioid = U.id)
GROUP BY
U.nome
A SQL acima retornará somente os usuários que possuírem pontos. Caso queira que retorne, também, quem não possua pontos, utilize LEFT JOIN.
eu fiz assim
SELECT usuario.id as idusuario, (SELECT SUM(quantidade) FROM mov WHERE usuario_id = idusuario AND operador = '+') as totalpositivo, (SELECT SUM(quantidade) FROM mov WHERE usuario_id = idusuario AND operador = '-') as totalnegativo, nome FROM usuario
foi blza..... ai eu gero um totalpositivo e um totalnegativo de todos os usuarios cadastrados.... só uma coisa..... tem como eu somar direto na sql tipo (totalpositivo - totalnegativo) as finalPontos...
feito
SELECT usuario.id AS idusuario, (
SELECT SUM( quantidade )
FROM mov
WHERE usuario_id = idusuario
AND operador = '+') - (
SELECT SUM( quantidade )
FROM mov
WHERE usuario_id = idusuario
AND operador = '-' ) AS parcial, nome
FROM usuariofiz outras mundando para transforar NULL em 0 para evitar erros
SELECT usuario.id AS idusuario, IFNULL( (
SELECT SUM( quantidade )
FROM mov
WHERE usuario_id = idusuario
AND operador = '+' ) , 0) - IFNULL( (
SELECT SUM( quantidade )
FROM mov
WHERE usuario_id = idusuario
AND operador = '-' ) , 0) AS total, nome
FROM usuario
simples:
SELECT a.nome, a.email, SUM(b.pontos_positivos) as totalPontos FROM usuarios a, pontos b WHERE b.id = a.id GROUP BY a.id