sql использовать сумму результата в предложении запроса - PullRequest
0 голосов
/ 26 марта 2019
select acc.user_id
     , member.nickname
     , sum(credit) as ttl 
     , member.balance
  from account_history as acc
  left 
  join member
    ON acc.user_id = member.user_id
 where balance > 0 
   and balance <50
 group 
    by user_id 

Я хотел бы отобразить строку, которая ttl ( sum(credit) ) > 0,

, поэтому я изменяю на

select acc.user_id,member.nickname, sum(credit) as ttl ,member.balance
from account_history as acc left join member 
ON acc.user_id=member.user_id 
where balance > 0 and balance <50 and ttl > 0
group by user_id 

, но получается ошибка.столбец ttl не найден

Ответы [ 5 ]

2 голосов
/ 26 марта 2019

Вы должны использовать оператор HAVING для фильтрации по полям совокупности

SELECT 
  acc.user_id,
  member.nickname, 
  sum(credit) as ttl,
  member.balance
FROM account_history AS acc left join member ON acc.user_id = member.user_id 
WHERE balance > 0 and balance <50
GROUP BY user_id 
HAVING ttl > 0 
2 голосов
/ 26 марта 2019

использование значения в предложении having должно работать:

select acc.user_id,member.nickname, sum(credit) as ttl ,member.balance
from account_history as acc 
    left join member ON acc.user_id=member.user_id 
where balance > 0 and balance <50 
group by user_id 
having  ttl > 0

в where пункте, вы не можете использовать псевдонимы

Также см. https://dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html

1 голос
/ 26 марта 2019

Я думаю, что это будет работать,

Select acc.user_id,member.nickname, sum(credit) as ttl ,member.balance
from account_history as acc left join member 
ON acc.user_id=member.user_id 
where balance > 0 and balance <50 and sum(credit) > 0
group by user_id 

, или вы также можете использовать пункт «иметь» для того же результата.

как,

Select acc.user_id,member.nickname, sum(credit) as ttl ,member.balance
from account_history as acc left join member 
ON acc.user_id=member.user_id 
where balance > 0 and balance <50
group by user_id 
having sum(credit) > 0
0 голосов
/ 26 марта 2019

Вам нужно использовать подзапрос, чтобы получить столбец ttl, поскольку он является производным столбцом

select * from
(select acc.user_id,member.nickname, sum(credit) as ttl ,member.balance
from account_history as acc left join member 
ON acc.user_id=member.user_id 
where balance > 0 and balance <50
group by user_id 
)bal
Where ttl>0
0 голосов
/ 26 марта 2019

используйте having и acc.user_id,member.nickname, членский баланс в группе по

SELECT 
  acc.user_id,
  member.nickname, 
  sum(credit) as ttl,
  member.balance
FROM account_history AS acc left join member ON acc.user_id = member.user_id 
WHERE balance > 0 and balance <50
GROUP BY acc.user_id, member.nickname,member.balance
HAVING ttl > 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...