- , :
SELECT r.rname
FROM restaurants r
JOIN sells s ON s.rname = r.rname
LEFT JOIN likes l on l.pizza = s.pizza
LEFT JOIN customers c
ON c.area = r.area
AND c.cname = l.cname
GROUP BY r.rname
HAVING 1
AND COUNT(DISTINCT c.cname) >= 2
AND COUNT(DISTINCT s.pizza) >= 3
AND MIN(s.price) < 20
ORDER BY r.rname
, , , . 1 2 3. :
SELECT *
FROM (
SELECT r.rname
FROM restaurants r
JOIN sells s ON s.rname = r.rname
JOIN likes l on l.pizza = s.pizza
JOIN customers c
ON c.area = r.area
AND c.cname = l.cname
GROUP BY r.rname
HAVING COUNT(DISTINCT c.cname) >= 2
) t1
NATURAL JOIN (
SELECT s.rname
FROM sells s
GROUP BY s.rname
HAVING MIN(s.price) < 20
AND COUNT(*) >= 3
) t2
, , EXISTS JOIN.
SELECT r.rname
FROM restaurants r
JOIN sells s ON s.rname = r.rname
JOIN likes l on l.pizza = s.pizza
JOIN customers c
ON c.area = r.area
AND c.cname = l.cname
GROUP BY r.rname
HAVING COUNT(DISTINCT c.cname) >= 2
AND EXISTS (
SELECT s.rname
FROM sells s
WHERE s.rname = r.rname
HAVING MIN(s.price) < 20
AND COUNT(*) >= 3
)
, , , , c.area = r.area. restaurants customers. , :
SELECT s.rname
FROM sells s
LEFT JOIN likes l on l.pizza = s.pizza
GROUP BY s.rname
HAVING COUNT(DISTINCT l.cname) >= 2
AND COUNT(DISTINCT s.pizza) >= 3
AND MIN(s.price) < 20