Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / передача поля в подзапрос / 4 сообщений из 4, страница 1 из 1
03.03.2014, 20:45:00
    #38577250
автор1521
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача поля в подзапрос
Здравствуйте!

пожалуйста помогите переделать запрос. в mysql работает, перевожу на постгрей.
дело в том, что в этом месте
Код: sql
1.
2.
3.
4.
5.
ROUND(SUM(
							CASE WHEN dif =0 THEN  
							pow(2, (20 - 16))
							WHEN dif <>0 THEN dif END
					) / count_all, 2)::numeric


поле count_all
SQL Error: ERROR: column "count_all" does not exist
LINE 50: ) / count_all, 2)::numeric
^

Сам запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
SELECT id, username, password, 
        ( SELECT COUNT(id) FROM sh WHERE username = w.username AND time > (NOW() - '600 SECOND'::INTERVAL) ) AS count_all,
       ( SELECT COUNT(id) FROM sh_a WHERE username = w.username AND time >  (NOW() - '600 SECOND'::INTERVAL) ) AS count_all_archive,
       (
         SELECT
                NULLIF(
				CASE WHEN our_result='Y' THEN  
					ROUND(SUM(
							CASE WHEN dif =0 THEN  
							pow(2, (20 - 16))
							WHEN dif <>0 THEN dif END
					) * POW(2, 16) / 600 / 1000)::numeric
				WHEN our_result<>'Y' THEN 0 END
		  , 0) AS hashrate
          FROM sh
          WHERE
            username = w.username
          AND time > (NOW() - '600 SECOND'::INTERVAL)
		   GROUP BY our_result
      ) + (
        SELECT
          NULLIF(
				CASE WHEN our_result='Y' THEN  
					ROUND(SUM(
							CASE WHEN dif =0 THEN  
							pow(2, (20 - 16))
							WHEN dif <>0 THEN dif END
					) * POW(2, 16) / 600 / 1000)::numeric
				WHEN our_result<>'Y' THEN 0 END
		  , 0) 
		  AS hashrate
          FROM sh_a
          WHERE
            username = w.username
          AND time > (NOW() - '600 SECOND'::INTERVAL)
		  GROUP BY our_result
      ) AS hashrate,
      (
        SELECT dif
        FROM sh
        WHERE username = w.username AND time > (NOW() - '600 SECOND'::INTERVAL )
      ) + (
        SELECT 
		
			NULLIF(
				ROUND(SUM(
							CASE WHEN dif =0 THEN  
							pow(2, (20 - 16))
							WHEN dif <>0 THEN dif END
					) / count_all, 2)::numeric
		  , 0) 			
        FROM sh_a
        WHERE username = w.username AND time > ( NOW() - '600 SECOND'::INTERVAL )
      ) AS dif
       
      FROM p_w AS w
      WHERE account_id = '1'
...
Рейтинг: 0 / 0
04.03.2014, 00:46:03
    #38577349
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача поля в подзапрос
автор1521,

а поле count_all это собственно поле какой таблицы?
...
Рейтинг: 0 / 0
04.03.2014, 11:54:51
    #38577566
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача поля в подзапрос
оберни в подзапрос
...
Рейтинг: 0 / 0
04.03.2014, 11:55:36
    #38577569
Ivan Durak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
передача поля в подзапрос
а вообще от всего запроса волосы шевелятся на голове...
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / передача поля в подзапрос / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]