SQL

SQL


Задание: 25 (Serge I: 2003-02-14)

Найдите производителей принтеров, которые производят ПК с наименьшим объемом RAM и с самым быстрым процессором среди всех ПК, имеющих наименьший объем RAM. Вывести: Maker
SELECT DISTINCT maker 
FROM product 
WHERE model IN ( 
SELECT model 
FROM pc 
WHERE ram = ( 
  SELECT MIN(ram) 
  FROM pc 
  ) 
AND speed = ( 
  SELECT MAX(speed) 
  FROM pc 
  WHERE ram = ( 
   SELECT MIN(ram) 
   FROM pc 
   ) 
  ) 
AND 
maker IN ( 
SELECT maker 
FROM product 
WHERE type='printer' 
)



Задание: 26 (Serge I: 2003-02-14)

Найдите среднюю цену ПК и ПК-блокнотов, выпущенных производителем A (латинская буква). Вывести: одна общая средняя цена.
SELECT sum(s.price)/sum(s.kol) as sredn FROM 
(SELECT price,1 as kol FROM pc,product 
 WHERE pc.model=product.model AND product.maker='A' 
UNION all 
 SELECT price,1 as kol FROM laptop,product 
 WHERE laptop.model=product.model AND product.maker='A') as s



Задание: 27 (Serge I: 2003-02-03)

Найдите средний размер диска ПК каждого из тех производителей, которые выпускают и принтеры. Вывести: maker, средний размер HD.
SELECT product.maker, AVG(pc.hd) 
FROM pc, product WHERE product.model = pc.model 
AND product.maker IN ( SELECT DISTINCT maker 
FROM product 
WHERE product.type = 'printer') 
GROUP BY maker



Задание: 28 (Serge I: 2003-02-03)

Найдите средний размер диска ПК (одно значение для всех) тех производителей, которые выпускают и принтеры. Вывести: средний размер HDSELECT AVG(pc.hd) 
FROM pc, product 
WHERE product.model = pc.model 
AND product.maker IN (SELECT DISTINCT maker 
FROM product WHERE product.type = 'printer')



Задание: 29 (Serge I: 2003-02-14)

В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.SELECT t1.point, t1.date, inc, out 
FROM income_o t1 LEFT JOIN outcome_o t2 ON t1.point = t2.point 
AND t1.date = t2.date 
UNION 
SELECT t2.point, t2.date, inc, out 
FROM income_o t1 RIGHT JOIN outcome_o t2 ON t1.point = t2.point 
AND t1.date = t2.date



Задание: 30 (Serge I: 2003-02-14)

В предположении, что приход и расход денег на каждом пункте приема фиксируется произвольное число раз (первичным ключом в таблицах является столбец code), требуется получить таблицу, в которой каждому пункту за каждую дату выполнения операций будет соответствовать одна строка. 

Вывод: point, date, суммарный расход пункта за день (out), суммарный приход пункта за день (inc). 

Отсутствующие значения считать неопределенными (NULL).
select point, date, SUM(sum_out), SUM(sum_inc) 
from( select point, date, SUM(inc) as sum_inc, null as sum_out from Income Group by point, date 
Union 
select point, date, null as sum_inc, SUM(out) as sum_out from Outcome Group by point, date ) as t 
group by point, date order by point



Задание: 31 (Serge I: 2002-10-22)

Для классов кораблей, калибр орудий которых не менее 16 дюймов, укажите класс и страну.SELECT DISTINCT class, country 
FROM classes 
WHERE bore >= 16



Задание: 32 (Serge I: 2003-02-17)

Одной из характеристик корабля является половина куба калибра его главных орудий (mw). С точностью до 2 десятичных знаков определите среднее значение mw для кораблей каждой страны, у которой есть корабли в базе данных.Select country, cast(avg((power(bore,3)/2)) as numeric(6,2)) as weight 
from (select country, classes.class, bore, name from classes left join ships on classes.class=ships.class 
union all 
select distinct country, class, bore, ship from classes t1 left join outcomes t2 on t1.class=t2.ship 
where ship=class and ship not in (select name from ships) ) a 
where name IS NOT NULL group by country



Задание: 33 (Serge I: 2002-11-02)

Укажите корабли, потопленные в сражениях в Северной Атлантике (North Atlantic). Вывод: ship.SELECT o.ship FROM 
BATTLES b 
LEFT join outcomes o ON o.battle = b.name 
WHERE b.name = 'North Atlantic' AND o.result = 'sunk'



Задание: 34 (Serge I: 2002-11-04)

По Вашингтонскому международному договору от начала 1922 г. запрещалось строить линейные корабли водоизмещением более 35 тыс.тонн. Укажите корабли, нарушившие этот договор (учитывать только корабли c известным годом спуска на воду). Вывести названия кораблей.Select name from classes,ships where launched >=1922 and displacement>35000 and type='bb' and 
ships.class = classes.class



Задание: 35 (qwrqwr: 2012-11-23)

В таблице Product найти модели, которые состоят только из цифр или только из латинских букв (A-Z, без учета регистра). 

Вывод: номер модели, тип модели.SELECT model, type 
FROM product 
WHERE upper(model) NOT like '%[^A-Z]%' 
OR model not like '%[^0-9]%'



Задание: 36 (Serge I: 2003-02-17)

Перечислите названия головных кораблей, имеющихся в базе данных (учесть корабли в Outcomes).Select name from ships where class = name 
union 
select ship as name from classes,outcomes where classes.class = outcomes.ship



Задание: 37 (Serge I: 2003-02-17)

Найдите классы, в которые входит только один корабль из базы данных (учесть также корабли в Outcomes).SELECT c.class 
FROM classes c 
 LEFT JOIN ( 
 SELECT class, name 
 FROM ships 
 UNION 
 SELECT ship, ship 
 FROM outcomes 
) AS s ON s.class = c.class 
GROUP BY c.class 
HAVING COUNT(s.name) = 1



Задание: 38 (Serge I: 2003-02-19)

Найдите страны, имевшие когда-либо классы обычных боевых кораблей ('bb') и имевшие когда-либо классы крейсеров ('bc').SELECT country 
FROM classes 
GROUP BY country 
HAVING COUNT(DISTINCT type) = 2



Задание: 39 (Serge I: 2003-02-14)

Найдите корабли, "сохранившиеся для будущих сражений"; т.е. выведенные из строя в одной битве (damaged), они участвовали в другой, произошедшей позже.WITH b_s AS 
(SELECT o.ship, b.name, b.date, o.result 
FROM outcomes o 
LEFT JOIN battles b ON o.battle = b.name ) 
SELECT DISTINCT a.ship FROM b_s a 
WHERE UPPER(a.ship) IN 
(SELECT UPPER(ship) FROM b_s b 
WHERE b.date < a.date AND b.result = 'damaged')



Задание: 40 (Serge I: 2002-11-05)

Найдите класс, имя и страну для кораблей из таблицы Ships, имеющих не менее 10 орудий.SELECT s.class, s.name, c.country 
FROM ships s 
LEFT JOIN classes c ON s.class = c.class 
WHERE c.numGuns >= 10


Report Page