SQL: проблемы с подзапросами AVG и подсчетом - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь перечислить все имена land.name, которые имеют больше, чем среднее количество айсберга, связанного с ним, и количество айсбергов.

CREATE TABLE Land( 
  c_namn VARCHAR(50) NOT NULL UNIQUE,
  code VARCHAR(4) 
);

CREATE TABLE Berg(
  land VARCHAR(4) ,
  Province VARCHAR(50) 
);
SELECT land.c_name, count(berg.land) 
FROM (
  SELECT avg(a.count3) AS avgberg 
  FROM (
    SELECT count(berg.land) as count3 
    FROM berg) AS a
  ) AS b
  INNER JOIN land ON land.code = berg.land
WHERE a.count3 > b.avgberg

Когда я запускаю свой код, я получаю сообщение об ошибке

"ОШИБКА: отсутствует запись предложения FROM для таблицы" a "
LINE 10:ГДЕ a.count3> b.avgberg "

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать запрос ниже, чтобы получить требуемые результаты.

Select land.name, count(berg.land) 
from land, berg
where land.name = berg.land
group by land.name having count(berg.land) > (SELECT avg(count(berg.land)) as count3 
                                              FROM berg 
                                              group by land) ;

Спасибо, Капиль

0 голосов
/ 26 сентября 2018

Я понимаю проблему следующим образом: для каждой земли есть несколько айсбергов.Найдите земли, которые имеют больше айсбергов, чем средняя земля.Это можно сделать так:

;WITH bergcount AS
(
    SELECT berg.land, count(berg.land) as count3
    FROM berg
    GROUP BY berg.land
)
SELECT land.name, bergcount.count3
FROM bergcount
INNER JOIN land ON land.code = bergcount.land
WHERE bergcount.count3 >
(
    SELECT avg(count3) as avgberg
    FROM bergcount
)

С новыми именами таблиц, которые вы недавно разместили, тот же запрос будет выглядеть так:

;WITH bergcount AS
(
    SELECT Berg.land, count(Berg.Land) as count3
    FROM Berg
    GROUP BY Berg.land
)
SELECT Land.name, bergcount.count3
FROM bergcount
INNER JOIN Land ON Land.c_namn = bergcount.land
WHERE bergcount.count3 >
(
    SELECT avg(count3) as avgberg
    FROM bergcount
);
...