Как я могу получить счет для каждой строки в отдельной таблице? - PullRequest
0 голосов
/ 05 ноября 2018

Я пытаюсь создать таблицу, в которой перечислены все коды города, комбинации кодов офисов и количество абонентов с этим кодом города, комбинации кодов офисов.

CREATE TABLE lines 
(
    portid integer NOT NULL primary key,
    areacode varchar(3), --subscriber area code
    officecode varchar(3), --subscriber office code
    stationcode varchar(4), --subscriber station code
    state varchar(4) NOT NULL, --line state BUSY, IDLE

    foreign key (portid) references facilities(portid) on delete cascade
);

CREATE TABLE subscribers 
(
    portid integer NOT NULL,
    name varchar(30) NOT NULL,
    address varchar(50),
    primary key (portid, name),
    foreign key (portid)  references facilities(portid) on delete cascade
);

SELECT 
    AREACODE, OFFICECODE, COUNT(SUBSCRIBERS.PORTID = LINES.PORTID)
FROM 
    LINES
INNER JOIN 
    SUBSCRIBERS ON SUBSCRIBERS.PORTID = LINES.PORTID;

Но это просто выводит 819 | 227 | 50. Он выводит общее количество подписчиков вместо количества подписчиков для каждой комбинации кодовой зоны и кода офиса. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Группировка или, может быть, вложенный выбор может дать вам то, что вы хотите, я придумал

SELECT areacode, officecode, lines.portid, count(*) from lines inner join 
subscribers on subscribers.portid=lines.portid group by areacode, officecode;
0 голосов
/ 05 ноября 2018

Вы хотите использовать что-то вроде:

SELECT LINES.AREACODE, LINES.OFFICECODE, COUNT(*) AS SUBS
FROM LINES INNER JOIN SUBSCRIBERS ON SUBSCRIBERS.PORTID=LINES.PORTID
GROUP BY LINES.AREACODE, LINES.OFFICECODE

Без предложения GROUP BY запрос выведет строку для каждой записи в объединенном наборе данных.

Чтобы вывести записи, для которых счетчик соответствует некоторым критериям, вы бы добавили предложение HAVING, например ::

SELECT LINES.AREACODE, LINES.OFFICECODE, COUNT(*) AS SUBS
FROM LINES INNER JOIN SUBSCRIBERS ON SUBSCRIBERS.PORTID=LINES.PORTID
GROUP BY LINES.AREACODE, LINES.OFFICECODE
HAVING COUNT(*) = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...