Скажем, у меня есть что-то вроде этого:
select sum(points) as total_points
from sometable
where total_points > 25
group by username
Я не могу обратиться к total_points
в, где пункт, потому что я получаю следующую ошибку: ERROR: column "total_points" does not exist
. В этом случае у меня не было бы проблемы при перезаписи sum(points)
в, где пункт, но я хотел бы некоторый способ сделать то, что я имею выше.
sum(points)
в, где пункт, действительно ли пост-ГРЭС достаточно умна для не перевычисления его?попробуйте
for i in 1 10 15 20
do
echo "do something with $i"
done
иначе, если у вас есть последние Solaris, есть bash 3 по крайней мере. например, это дает диапазон от 1 до 10 и 15 до 20
for i in {1..10} {15..20}
do
echo "$i"
done
ИЛИ используйте инструмент, как nawk
for i in `nawk 'BEGIN{ for(i=1;i<=10;i++) print i}'`
do
echo $i
done
ИЛИ даже цикл while
while [ "$s" -lt 10 ]; do s=`echo $s+1|bc`; echo $s; done
-121--3329806- SELECT SUM(points) AS total_points
FROM sometable
GROUP BY
username
HAVING SUM(points) > 25
PostgreSQL
не будет вычислять сумму дважды.
Я считаю, PostgreSQL похож на другие бренды sql, где нужно сделать:
SELECT t.*
FROM (
SELECT SUM(points) AS total_points
FROM sometable
GROUP BY username
) t
WHERE total_points > 25
EDIT: Забыли псевдоним подзапроса.
SELECT SUM(points) AS total_points
FROM sometable
GROUP BY
username
HAVING SUM(points) > 25
PostgreSQL
не будет рассчитывать сумма дважды.
У вас есть ошибка в операторе:
select sum(points) as total_points
from sometable
where total_points > 25 -- <- error here
group by username
Вы не можете ограничить строки на Total_points
, потому что Мне немного
У вас нет этой колонны. То, что вы хотите, это предел gouped в результате строк по total_points
, вычисленных для каждой группы, так:
select sum(points) as total_points
from sometable
group by username
having sum(points) > 25
Если заменить total_point
в вашем примере, то вы просто Chech если сумма вычисляется из всех Ряды больше 25 лет, а затем верните все строки, сгруппированные именем пользователя.
Редактирование:
Всегда помните заказ:
FROM
с JOIN
s, чтобы получить таблицы где
для предельных строк из таблиц SELECT
для предела столбцов GROUP BY
для групповых строк в родственные группы HAVING
для предельных результате групп порядок
для результатов заказа