Как объединить записи из двух таблиц с помощью предложения group by в oracle? - PullRequest
1 голос
/ 10 марта 2012

У меня есть два стола ward1 и ward2ie;

create table ward1
(
ward_id int
)

create table ward2
(
ward_id int,
ward_name varchar(10)
)

и значения -

insert into ward1 values(101);
insert into ward1 values(101);
insert into ward1 values(102);
insert into ward1 values(102);
insert into ward1 values(102);

insert into ward2 values(101,'child');
insert into ward2 values(102,'General');

Так что мне нужно произвести общее количество вхождений ward_id. Это было просто для меня, я использовал этот код.

SELECT ward_id, count(ward_id) as "No of occurrence" from ward1 group by ward_id;

вывод был -

ward_id   No of occurrence
101       2
102       3

это записи из таблицы ward1, но когда я хочу ward_name из таблицы ward2. Я получаю ошибку. Это мой код -

select ward1.ward_id as "ward_id",ward2.ward_name,
count(ward1.ward_id)as "No of occurrence" from ward1,
ward2 group by ward1.ward_id,ward2.ward_name 
having ward1.ward_id=ward2.ward_id;

Это говорит не группа по выражению ...

Я хочу отобразить вот так -

ward_id   ward_name    No of occurrence
101       child        2
102       General      3

Пожалуйста, помогите ....

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

Закрыть. Вам действительно нужно просто объединить 2 таблицы в предложении where (или использовать предпочтительный оператор "join")

select ward1.ward_id as "ward_id",ward2.ward_name,
count(ward1.ward_id)as "No of occurrence" 
from ward1,ward2 
where ward1.ward_id = ward2.ward_id
group by ward1.ward_id,ward2.ward_name;
1 голос
/ 10 марта 2012

Вы не хотите, чтобы здесь использовалось предложение HAVING, просто используйте предложение WHERE для связи таблиц:

select ward1.ward_id as "ward_id",
       ward2.ward_name,
       count(ward1.ward_id) as "No of occurrence" 
  from ward1,
       ward2
 WHERE ward1.ward_id = ward2.ward_id
 group by ward1.ward_id,
          ward2.ward_name;

Вы действительно должны использовать синтаксис SQL-92, а не SQL-86, тогда вам просто нужно добавить условие JOIN:

select ward_id,
       ward2.ward_name,
       count(ward_id) as "No of occurrence" 
  from ward1
 INNER JOIN ward2 USING (ward_id)
 group by ward_id,
          ward2.ward_name;

Надеюсь, это поможет ...

0 голосов
/ 10 марта 2012
select ward1.ward_id as "ward_id",
       ward2.ward_name,
       count(ward1.ward_id) as "No of occurrence"
from   ward1, ward2
where  ward1.ward_id = ward2.ward_id
group by ward1.ward_id,ward2.ward_name;
...