TB16 182 – Fd. Medlem
Postad: 28 aug 2019 14:15

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 topic

FROM 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? 

annlu 230
Postad: 28 aug 2019 19:19

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. 

Svara
Close