Не могу использовать Группировать по - Показывать ошибку: столбец должен появляться в предложении GROUP BY или использоваться в статистической функции - PullRequest
0 голосов
/ 26 февраля 2020
select table1.column1, table1.column2, table2.column1,  table2.column2 
from table1,table2 
where table1.column1=table2.column1 and table1.column2 in ('data1','data2','data3') and table2.column1 <> 1 
order by UPPER(column3)

Здесь table1.column2 - это первичный ключ. Я хочу получить строки, которые содержат различные значения 'table1.column1' . Я попытался следующий запрос,

select table1.column1, table1.column2, table2.column1,  table2.column2 
from table1,table2 
where table1.column1=table2.column1 and table1.column2 in ('data1','data2','data3') and table2.column1 <> 1 
group by (table1.column1)

Он показывает следующую ошибку

org.postgresql.util.PSQLException: ERROR: column "table1.column2" must appear in the GROUP BY clause or be used in an aggregate function 

на основе различных значений столбца1, другие столбцы должны соответствовать этому. Например, enter image description here

должно получиться как enter image description here

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Ваш запрос должен быть:

     select a.Column1,a.Column2
from Table1 a
Inner join Table2 b
on a.Column1  = b.Column1
where a.Column2 in ('1231','562','122')
group by a.column1,a.Column2
order by a.column1,a.Column2
2 голосов
/ 26 февраля 2020

Если вы выбрали 4 столбца, и ни один из них не является частью функции агрегирования, вам нужно поместить их все в предложение group by. Так что это будет код без ошибок:

select table1.column1
       , table1.column2
       , table2.column1
       , table2.column2 
from table1
join table2 on table1.column1=table2.column1 
where table1.column2 in ('data1','data2','data3') 
and table2.column1 <> 1 
group by table1.column1
       , table1.column2
       , table2.column1
       , table2.column2 ;

Также, когда вы делаете соединение, пожалуйста, не делайте это так:

from table1,table2 
where table1.column1=table2.column1

Делайте это так:

from table1
join table2  on table1.column1 = table2.column1

Также настоятельно рекомендуется использовать псевдонимы в вашем запросе:

select t1.column1
       , t1.column2
       , t2.column1
       , t2.column2 
from table1 t1
join table2 t2 on t1.column1 = t2.column1 
where t1.column2 in ('data1','data2','data3') 
and t2.column1 <> 1 
group by t1.column1
       , t1.column2
       , t2.column1
       , t2.column2;

Если вы хотите выбрать «Я хочу получить строки, которые содержат различные значения table1.column1», но вы Хотите также показать другие столбцы, тогда вам нужно решить, что вы хотите с другими столбцами? Например:

select t1.column1
       , max(t1.column2)
       , sum(t2.column1)
       , min(t2.column2)
from table1 t1
join table2 t2 on t1.column1 = t2.column1 
where t1.column2 in ('data1','data2','data3') 
and t2.column1 <> 1 
group by t1.column1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...