Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Banonanelly
89 / 21 / 35
Регистрация: 29.06.2016
Сообщений: 96
1

Подсчитать количество обьектов, встречающихся в двух столбцах

26.12.2016, 08:03. Просмотров 800. Ответов 4
Метки нет (Все метки)

Есть такая база: http://sqlfiddle.com/#!9/6785eb/1

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
CREATE TABLE Airport
(
  id   INT,
  name NVARCHAR(100)
);
 
CREATE TABLE Flight
(
  id              INT,
  airport_from_id INT,
  airport_to_id   INT
);
 
INSERT INTO Airport(id,name) VALUES (1, 'Hartsfield–Jackson Atlanta International Airport');
INSERT INTO Airport(id,name) VALUES (2, 'Beijing Capital International Airport');
INSERT INTO Airport(id,name) VALUES (3, 'Dubai International Airport');
INSERT INTO Airport(id,name) VALUES (4, 'O''Hare International Airport');
INSERT INTO Airport(id,name) VALUES (5, 'Tokyo Haneda Airport');
INSERT INTO Airport(id,name) VALUES (6, 'London Heathrow Airport');
 
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (1, 1, 3);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (2, 2, 1);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (3, 1, 5);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (4, 5, 3);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (5, 2, 5);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (6, 6, 4);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (7, 1, 6);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (8, 4, 3);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (9, 1, 4);
INSERT INTO Flight(id,airport_from_id,airport_to_id) VALUES (10, 2, 6);

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
SELECT
  airport_from.name,
  airport_to.name
FROM Flight AS f
INNER JOIN Airport AS airport_from ON f.airport_from_id=airport_from.id
INNER JOIN Airport AS airport_to ON f.airport_to_id=airport_to.id


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

Т.е. нужно получить нечто, вроде этого:
Код
name                                             | count 
-------------------------------------------------|------
Hartsfield–Jackson Atlanta International Airport | 4
Beijing Capital International Airport            | 3
Dubai International Airport                      | 6
O''Hare International Airport                    | 3
Tokyo Haneda Airport                             | 2
London Heathrow Airport                          | 2
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2016, 08:03
Ответы с готовыми решениями:

Цикл: Подсчитать количество встречающихся букв в тексте
Здравтсвуйте! Мне необходимо написать программу, подсчитывающую количество...

Подсчитать количество различных чисел, встречающихся в массиве
Подсчитать количество различных чисел, встречающихся в массиве A. Повторяющиеся...

Подсчитать количество чисел, одновременно встречающихся в массивах
Доброго времени дня помогите составить задачу пожалуйста вот условие: 1)...

Подсчитать количество цифр, встречающихся в каждой строке файла
Создать в редакторе текстовый файл, внести в него 10 строк произвольного...

Подсчитать количество различных чисел, встречающихся в одномерном массиве
1) Подсчитать количество различных чисел, встречающихся в одномерном массиве;...

4
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
26.12.2016, 08:31 2
Лучший ответ Сообщение было отмечено Banonanelly как решение

Решение

SQL
1
2
3
4
5
6
7
8
SELECT Airport.name, 
(SELECT COUNT(airport_from_id) 
  FROM Flight FFrom
  WHERE FFrom.airport_from_id = Airport.id) +
(SELECT COUNT(airport_to_id) 
  FROM Flight FTO
  WHERE FTO.airport_to_id = Airport.id) AS FlightCnt
FROM Airport
1
Banonanelly
89 / 21 / 35
Регистрация: 29.06.2016
Сообщений: 96
26.12.2016, 09:11  [ТС] 3
texnik-san,
Предположим, мне нужно узнать, сколько раз встречаются только аэропорты с id 1, 2 и 3
Как это можно сделать?
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
26.12.2016, 09:44 4
В самом конце добавить строчку

SQL
1
WHERE Airport.id >=1 AND Airport.id <=3
Почему вообще это вызвало у вас затруднения?

Добавлено через 2 минуты
Я имею в виду, что смутило? Это обычный запрос на выборку из таблицы Airport. Если бы вам нудны были только названия аэропоотов с кодами 1,2,3 это же не вызвало бы трудостей? Тут все то же самое.
0
Banonanelly
89 / 21 / 35
Регистрация: 29.06.2016
Сообщений: 96
26.12.2016, 10:43  [ТС] 5
texnik-san,
Я немного неправильно сформулировал вопрос.

Добавим поле season в таблицу Flight
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CREATE TABLE Airport
(
  id         INT,
  name       NVARCHAR(100)
);
 
CREATE TABLE Flight
(
  id              INT,
  season          INT,
  airport_from_id INT,
  airport_to_id   INT
);
 
INSERT INTO Airport VALUES (1, 'Hartsfield–Jackson Atlanta International Airport');
INSERT INTO Airport VALUES (2, 'Beijing Capital International Airport');
INSERT INTO Airport VALUES (3, 'Dubai International Airport');
INSERT INTO Airport VALUES (4, 'O''Hare International Airport');
INSERT INTO Airport VALUES (5, 'Tokyo Haneda Airport');
INSERT INTO Airport VALUES (6, 'London Heathrow Airport');
 
INSERT INTO Flight VALUES (1, 1, 1, 3);
INSERT INTO Flight VALUES (2, 1, 2, 1);
INSERT INTO Flight VALUES (3, 1, 1, 5);
INSERT INTO Flight VALUES (4, 2, 5, 3);
INSERT INTO Flight VALUES (5, 2, 2, 5);
INSERT INTO Flight VALUES (6, 2, 6, 4);
INSERT INTO Flight VALUES (7, 2, 1, 6);
INSERT INTO Flight VALUES (8, 2, 4, 3);
INSERT INTO Flight VALUES (9, 2, 1, 4);
INSERT INTO Flight VALUES (10, 2, 2, 6);


И допустим, мне нужно подсчитать, сколько раз встречается аэропорт только в первом сезоне, и только для тех аэропортов, которые хоть раз там встречаются.
Т.е. для 1, 2, 3 и 5.

Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
SELECT Airport.name, 
(SELECT COUNT(airport_from_id) 
  FROM Flight FFrom
  WHERE FFrom.airport_from_id = Airport.id AND season = 1) +
(SELECT COUNT(airport_to_id) 
  FROM Flight FTO
  WHERE FTO.airport_to_id = Airport.id AND season = 1) AS FlightCnt
FROM Airport


Можно, конечно, все обернуть еще раз в SELECT
SQL
1
2
3
SELECT name, FlightCnt 
FROM (%запрос выше%)
WHERE FlightCnt <> 0
Но может есть способ попроще?
0
26.12.2016, 10:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2016, 10:43

Подсчитать количество положительных сумм элементов в столбцах заданной матрицы
Составить процедуру, формирующую одномерный массив из сумм элементов в столбцах...

Заполнить динамический массив, и подсчитать количество отрицательных чисел в столбцах с четным номером
Ввести с клавиатуры одно или два (в зависимости от варианта) целых числа N и M....

Подсчитайте количество чисел, встречающихся в первой строке, но не встречающихся во второй
Ограничение по времени работы программы: 1 секунда В текстовом файле две...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru