Hej!
Chciałem wypróbować użycie zmiennych lokalnych w kodzie ale mi nie działa.
Co jest z tym nie tak?
DECLARE @AverageSalary AS SMALLINT
SET @AverageSalary = AVG(employees.salary)
SELECT *
FROM employees
WHERE salary > @AverageSalary
Hej!
Chciałem wypróbować użycie zmiennych lokalnych w kodzie ale mi nie działa.
Co jest z tym nie tak?
DECLARE @AverageSalary AS SMALLINT
SET @AverageSalary = AVG(employees.salary)
SELECT *
FROM employees
WHERE salary > @AverageSalary
DECLARE
może być wykorzystane jedynie wewnątrz procedury (tzw. stored procedure
).
Ze zmiennymi sesyjnymi jest tak samo?
Nie jestem pewien - musiałbyś sprawdzić (przy czym wtedy nie DECLARE
, a samo SET
).
Nie wiem, jak to się robi w mysqlu, ale próbowałbym tak:
SET @AverageSalary=(SELECT AVG(salary) FROM employees)
Tylko nie wiem, po co Ci tam w ogóle zmienna. Nie możesz wepchnąć tego zapytania o średnią do WHERE?
O tym, że średnią pakujesz do zmiennej typu całkowitego to już nawet nie wspomnę. Damn, wspomniałem :-)
Mogę. Ale chciałem poeksperymentować.
Twoje rozwiązanie działa w mySQL:
SET @AverageSalary=(SELECT AVG(salary) FROM employees);
SELECT *
FROM employees
WHERE salary > @AverageSalary