Что касается динамических столбцов в запросе пост-ГРЭС?

Скажем, у меня есть что-то вроде этого:

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) в, где пункт, действительно ли пост-ГРЭС достаточно умна для не перевычисления его?
16
задан Dean 31 May 2013 в 00:11
поделиться

3 ответа

попробуйте

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 не будет вычислять сумму дважды.

-121--1723597-

Я считаю, PostgreSQL похож на другие бренды sql, где нужно сделать:

SELECT t.* 
FROM (
    SELECT SUM(points) AS total_points
    FROM sometable
    GROUP BY username
) t
WHERE total_points > 25

EDIT: Забыли псевдоним подзапроса.

10
ответ дан 30 November 2019 в 16:36
поделиться
SELECT  SUM(points) AS total_points
FROM    sometable
GROUP BY
        username
HAVING  SUM(points) > 25

PostgreSQL не будет рассчитывать сумма дважды.

20
ответ дан 30 November 2019 в 16:36
поделиться

У вас есть ошибка в операторе:

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 лет, а затем верните все строки, сгруппированные именем пользователя.

Редактирование:
Всегда помните заказ:

  1. является FROM с JOIN s, чтобы получить таблицы
  2. есть где для предельных строк из таблиц
  3. является SELECT для предела столбцов
  4. является GROUP BY для групповых строк в родственные группы
  5. является HAVING для предельных результате групп
  6. IS порядок для результатов заказа
8
ответ дан 30 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: