Можно ли иметь оператор DISTICT только для одной переменной? - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужен только оператор SELECT DISTINCT для yearLevel (поскольку я не хочу дубликатов только для yearLevel)

изображение данных, отображаемых на экране

Например, я хочу, чтобы в таблице была только одна запись yearLevel 12, и для этого должна быть запись с наименьшим значением totalSeconds

code

$sql = "SELECT firstName, lastName, yearLevel, totalSeconds 

FROM studentInformation
  JOIN record
    ON studentInformation.studentId = record.student_Id

    ORDER BY totalSeconds ASC 
    LIMIT  1  "; 

Возможно ли это для этого -

$sql = "SELECT firstName, lastName, DISTINCT yearLevel, totalSeconds 

    FROM studentInformation
      JOIN record
        ON studentInformation.studentId = record.student_Id

        ORDER BY totalSeconds ASC 
        LIMIT  1  "; 

1 Ответ

0 голосов
/ 21 апреля 2020

При условии, что «firstName» и «lastName» находятся в таблице «studentInformation», а «yearLevel» и «totalSeconds» находятся в таблице «record», этот запрос должен работать. Он использует коррелированный подзапрос. Я не проверял это; если это не работает, пожалуйста, дайте мне знать.

    SELECT a.firstName, a.lastName, b.yearLevel, b.totalSeconds
      FROM studentInformation a
INNER JOIN record b ON a.studentId = b.studentId
     WHERE b.totalSeconds = ( SELECT min(totalSeconds)
                                FROM record
                               WHERE yearLevel = b.yearLevel )
  ORDER BY b.totalSeconds ASC

Если предположить, что только "totalSeconds" находится в "записи" таблицы, это тоже может сработать.

    SELECT a.firstName, a.lastName, a.yearLevel, b.totalSeconds
      FROM studentInformation a
INNER JOIN record b ON a.studentId = b.studentId
     WHERE b.totalSeconds = ( SELECT MIN(d.totalSeconds)
                                FROM studentInformation c
                          INNER JOIN record d ON c.studentId = d.studentId
                               WHERE c.yearLevel = a.yearLevel )
  ORDER BY b.totalSeconds ASC
...