Как получить наибольшее значение внешнего вида в одной таблице, из другой таблицы? - PullRequest
0 голосов
/ 10 мая 2019

Таким образом, у меня есть 3 таблицы, ссылающиеся на автомобили, гарантии и аварии. Я хочу знать марку автомобилей, на которых было больше всего аварий, по сравнению с другими.

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

Это мои столы

create table car(
    n_veic bigint not null,
    matric varchar(15) not null,
    pais_matric text not null,
    n_pess bigint not null,
    tipo text not null,
    cor text not null,
    brand text not null,
    modelo varchar(15),
    primary key(n_veic),
    unique(matric),
    foreign key (n_pess) references pessoa(n_pess)
);

create table ensurance(
    apolice bigint not null,
    segurado bigint not null,
    car bigint not null,
    datai date not null,
    dataf date not null,
    cobertura numeric(10,2) not null,
    primary key(apolice),
    unique(segurado, veiculo),
    foreign key (segurado) references pessoa(n_pess),
    foreign key (car) references car(n_veic)
);  

create table accident(
    n_acid bigint not null,
    pess_segura bigint not null,
    veic_seguro bigint not null,
    data date not null,
    local varchar(255) not null,
    descr text not null,
    primary key(n_acid),
    unique(n_acid, veic_seguro),
    foreign key (pess_segura,veic_seguro) references ensurance(segurado, car)

Это то, что я пытался

SELECT marca
FROM veiculo NATURAL JOIN acidente
GROUP BY marca
HAVING count (distinct n_veic)>=ALL
    (SELECT count (distinct n_veic)
    FROM veiculo NATURAL JOIN acidente
    GROUP BY marca);

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Я думаю, что логика:

select c.marca, count(*) as num_acidentes
from acidente a join
     car c
     on a.veic_seguro = c.n_veic
group by c.marca
order by num_acidentes desc;

Вы можете использовать fetch first 1 row only - или что угодно, подходящее для вашей базы данных - чтобы получить только одну строку.

0 голосов
/ 10 мая 2019

Попробуйте это-

Примечание: 1. Старайтесь избегать ЕСТЕСТВЕННОГО СОЕДИНЕНИЯ и используйте конкретную ссылку на столбец. 2. Переосмыслить DISTINCT для счета действительно необходимо или нет.

SELECT TOP 1 marca, COUNT(DISTINCT n_veic) 
FROM veiculo 
NATURAL JOIN acidente 
GROUP BY marca
ORDER BY COUNT(DISTINCT n_veic) DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...