Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Oracle - MS Server / 4 / Queries.sql

.txt
Скачиваний:
18
Добавлен:
17.04.2018
Размер:
5.5 Кб
Скачать
--Начало 1-го
SELECT FLAT.Adr, FLAT.Nrooms, PERSON.FIO, PERSON.Rdate, PERSON.SumD
FROM FLAT INNER JOIN
PERSON ON FLAT.Adr = PERSON.Adr
WHERE (PERSON.SumD > 1300)
UNION

--Начало 2-го
SELECT FLAT_1.Adr, FLAT_1.Nrooms, PERSON_1.FIO, PERSON_1.Rdate, PERSON_1.SumD
FROM FLAT AS FLAT_1 INNER JOIN
PERSON AS PERSON_1 ON FLAT_1.Adr = PERSON_1.Adr
WHERE (PERSON_1.SumD < 500)
UNION

--Начало 3-го
SELECT FLAT_2.Adr, FLAT_2.Nrooms, PERSON_2.FIO, PERSON_2.Rdate, PERSON_2.SumD
FROM FLAT AS FLAT_2 INNER JOIN
PERSON AS PERSON_2 ON FLAT_2.Adr = PERSON_2.Adr
WHERE (PERSON_2.SumD <= 1200) AND (PERSON_2.SumD >= 600)



--7a среднедушевой доход жителей каждой квартиры;

SELECT Adr, SUM(SumD)
FROM PERSON
GROUP BY Adr


--7б число жителей, зарегистрированных в каждой квартире

SELECT Adr, COUNT(Nom)
FROM PERSON
GROUP BY Adr


--7в число источников дохода у каждого жителя с ненулевым общим дохо-дом

SELECT COUNT(HAVE_D.Id), PERSON.SumD, PERSON.FIO
FROM HAVE_D INNER JOIN
PERSON ON HAVE_D.Nom = PERSON.Nom
GROUP BY PERSON.SumD, PERSON.FIO
HAVING (PERSON.SumD > 0)


--7г число различных источников дохода у жителей каждой квар-тиры

SELECT PERSON.Adr, COUNT(HAVE_D.Id) AS Expr1
FROM PERSON INNER JOIN
HAVE_D ON PERSON.Nom = HAVE_D.Nom
GROUP BY PERSON.Adr


--7д сумму общих доходов у однофамильцев и полных тезок, проживающих в одной квартире

SELECT Adr, FIO, SUM(SumD)
FROM PERSON
GROUP BY Adr, FIO


--7е среднедушевой доход жителей каждой квартиры, в которой проживает более одного человека и у которых сумма общих доходов меньше 2000 руб

SELECT Adr, SUM(SumD) / COUNT(Nom) AS Expr1
FROM PERSON
GROUP BY Adr
HAVING (COUNT(Nom) > 1) AND (SUM(SumD) < 2000)


--8а список жителей, у которых общий доход больше размера самого доходного источника

SELECT FIO, SumD
FROM PERSON
WHERE (SumD >
(SELECT MAX(Moneys) AS Expr1
FROM PROFIT))


--8б адреса квартир, жители которых не могут оплачивать коммунальные услуги (считать, что оплата коммунальных услуг прямо про-порциональна площади квартиры);

SELECT Adr
FROM FLAT
WHERE (Skv * Skv >
(SELECT SUM(SumD) AS Expr1
FROM PERSON
WHERE (FLAT.Adr = Adr)))


--8в список квартир, в которых не установлены телефоны

SELECT Adr, Skv, Nrooms, Kcategory
FROM FLAT
WHERE (Adr NOT IN
(SELECT Adr
FROM TPHONE))


--8г список жителей, имеющих источник дохода с размером больше 400 руб

SELECT Nom, FIO, Rdate, Pol, SumD, Adr
FROM PERSON
WHERE EXISTS
(SELECT PROFIT.Id, PROFIT.Source, PROFIT.Moneys, HAVE_D.Nom, HAVE_D.Id AS Expr1, HAVE_D.Comment
FROM PROFIT INNER JOIN
HAVE_D ON PROFIT.Id = HAVE_D.Id
WHERE (PERSON.Nom = HAVE_D.Nom) AND (PROFIT.Moneys > 400))


--8д список жителей, имеющих хотя бы один источник дохода, размер которого больше четверти их общего дохода

SELECT Nom, FIO, Rdate, Pol, SumD, Adr
FROM PERSON
WHERE EXISTS
(SELECT PROFIT.Id, PROFIT.Source, PROFIT.Moneys, HAVE_D.Nom, HAVE_D.Id AS Expr1, HAVE_D.Comment
FROM PROFIT INNER JOIN
HAVE_D ON PROFIT.Id = HAVE_D.Id
WHERE (PERSON.Nom = HAVE_D.Nom) AND (PROFIT.Moneys > PERSON.SumD / 4))


--8е фамилии жителей, у которых все источники дохода по размеру больше 90% их общего дохода

SELECT FIO
FROM PERSON
WHERE EXISTS
(SELECT PROFIT.Id, PROFIT.Source, PROFIT.Moneys, HAVE_D.Nom, HAVE_D.Id AS Expr1, HAVE_D.Comment
FROM PROFIT INNER JOIN
HAVE_D ON PROFIT.Id = HAVE_D.Id
WHERE (PERSON.Nom = HAVE_D.Nom) AND ((PERSON.SumD * 0.9) < ALL
(SELECT Moneys
FROM PROFIT AS PROFIT_1
WHERE (PERSON.Nom = HAVE_D.Nom) AND (Id = HAVE_D.Id))))


--8ж все сведения о самых популярных источниках дохода

SELECT HAVE_D.Id, PROFIT.Moneys
FROM HAVE_D CROSS JOIN
PROFIT
GROUP BY HAVE_D.Id, PROFIT.Moneys
HAVING (COUNT(HAVE_D.Nom) >= ALL
(SELECT COUNT(Nom) AS Expr1
FROM HAVE_D AS HAVE_D_1
GROUP BY Id))
Соседние файлы в папке 4