SQL - DISTINCT
Uppgift:
Consider a table with the schema
ExamQuestions(courseCode,date,questionNumber,points,topic).
Write an SQL query that shows the topics that appear in exams of at least three different courses.
Jag löste den på följande vis:
SELECT topicFROM ExamQuestions
GROUP BY topic
HAVING COUNT(courseCode) >= 3
När jag kollade upp svaret till uppgiften så används DISTINCT:
....
HAVING COUNT( DISTINCT courseCode) >= 3
Är det för att undvika/utesluta att två kurser med samma kurskod har samma topics på två olika tentor?
Exempel: Tänk dig en situation där det bara finns en enda kurs som behandlar ett visst topic, exempelvis med 10 stycken frågor om det ämnet. I det fallet blir COUNT(courseCode) = 10 och du får felaktikt fram detta ämne/topic. Men det du egentligen vill ha fram är de ämnen som behandlas i tre eller fler olika (distinct) kurser.
Lägger du alltså till DISTINCT i din kod skulle COUNT-uttrycket för exempelet ovan bli 1, eftersom ämnet bara finns med i en kursexamen.
Är det för att undvika/utesluta att två kurser med samma kurskod har samma topics på två olika tentor?
Jag skulle utgå ifrån att courseCode är unikt (primary key) och att två olika kurser inte kan ha samma kurskod.