-- Βρες ζεύγη της μορφής (ερώτηση, απάντηση) για όλες τις απαντήσεις και τις ερωτήσεις όπου απαντά η καθεμία.

SELECT q."question", a."answer"
FROM "question" q, "answer" a
WHERE q."questionID" = a."questionID";

-- Ή
SELECT q."question", a."answer"
FROM "question" q JOIN "answer" a ON q."questionID" = a."questionID";

-- Ή
SELECT q."question", a."answer"
FROM "question" q NATURAL JOIN "answer" a;

-- Ή
SELECT q."question", a."answer"
FROM "question" q JOIN "answer" a USING ("questionID");

-- Ταξινομήστε σε αύξουσα αλφαβητική σειρά τα μοναδικά ονοματεπώνυμα των μελών που ενδιαφέρονται για άρθρα που σχετίζονται με κατηγορία που το όνομά της ξεκινά από Fi

SELECT DISTINCT m."secondName", m."firstName"
FROM "member" m JOIN "memberInterests" mi ON (m."email" = mi."memberID")
JOIN "category" c ON (mi."interestID" = c."categoryID")
JOIN "article" a ON (a."categoryID" = c."categoryID")
WHERE c."name" LIKE 'Fi%'
ORDER by m."secondName";

-- Βρες τους μοναδικούς τίτλους όλων των ερωτήσεων και των απαντήσεων

SELECT q."question" as title
FROM "question" q
UNION
SELECT a."answer" as title
FROM "answer" a;

-- Βρες τις κατηγορίες που κατηγοριοποιούν και άρθρα και ερωτήσεις

SELECT "name" FROM "category" JOIN "article" USING("categoryID")
INTERSECT
SELECT "name" FROM "category" JOIN "question" USING("categoryID");

-- Βρες την μικρότερη κάτω ηλικία (fromAge) αγγελιών προσφοράς εργασίας στην Γερμανία (Germany)

SELECT min(jo."fromAge") as min_age
FROM "jobOffer" jo, "advertisement" a
WHERE jo."advertisementID" = a."advertisementID" and a."country" = 'Germany';

-- Ή
SELECT MIN(jo."fromAge") as min_age
FROM "jobOffer" jo NATURAL JOIN "advertisement" a
WHERE a."country" = 'Germany';

-- Τύπωσε το πλήθος των αγγελιών προσφοράς εργασίας στην Γερμανία (Germany) καθώς και το πλήθος των μοναδικών κάτω ηλικιών (fromAge) αυτών

SELECT COUNT(*) as num, COUNT(DISTINCT jo."fromAge")
FROM "jobOffer" jo NATURAL JOIN "advertisement" a
WHERE a."country" = 'Germany';

SELECT *
FROM "jobOffer" jo NATURAL JOIN "advertisement" a
WHERE a."country" = 'Germany';

-- Τύπωσε σε φθίνουσα αλφαβητική σειρά τις χώρες, το πλήθος των αγγελιών προσφοράς εργασίας ανά χώρα καθώς και την μικρότερη κάτω ηλικία (fromAge) αγγελιών προσφοράς εργασίας σε κάθε μία από αυτές

SELECT a."country", COUNT(*) as num, MIN(jo."fromAge") as min_age
FROM "jobOffer" jo NATURAL JOIN "advertisement" a
GROUP BY a."country"
ORDER BY a."country";

-- Τύπωσε σε φθίνουσα αλφαβητική σειρά τις χώρες για τις οποίες το πλήθος των αγγελιών προσφοράς εργασίας ανά χώρα είναι τουλάχιστον 18
-- καθώς και την μικρότερη κάτω ηλικία (fromAge) αγγελιών προσφοράς εργασίας σε κάθε μία από αυτές
--
SELECT a."country", COUNT(*) as num, MIN(jo."fromAge") as min_age
FROM "jobOffer" jo NATURAL JOIN "advertisement" a
GROUP BY a."country"
HAVING COUNT(*) >= 18
ORDER BY a."country";

-- Για κάθε μέλος εκτύπωσε το πλήθος των χωρών των δημοσιοποιήσεων που σχετίζονται με αυτό. Εκτυπώστε την πληροφορία
-- και για τα μέλη με τα οποία δεν σχετίζεται καμία δημοσιοποίηση

SELECT m."email", COUNT(a."country") as num --COUNT(DISTINCT a."country") as num
FROM "member" m LEFT JOIN "advertisement" a ON (m."email" = a."email")
GROUP BY m."email";

-- βρες τα μέλη για τα οποία δεν υπάρχει καμία δημοσιοποίηση για την χώρα Brazil που να σχετίζεται μαζί τους.

SELECT "email"
FROM "member"
EXCEPT
SELECT a."email"
FROM "advertisement" a
WHERE a."country" = 'Brazil';

-- Ή
SELECT m."email", a."email"
FROM "member" m LEFT JOIN "advertisement" a ON (m."email" = a."email" AND a."country" = 'Brazil')
WHERE a."email" IS NULL;

-- Ή
SELECT m."email", a."email"
FROM "member" m LEFT JOIN "advertisement" a ON (m."email" = a."email" AND a."country" = 'Brazil')
GROUP BY m."email", a."email"
HAVING COUNT(a."advertisementID") = 0;