MySQL сгруппировать по функциям, показывая отсутствие данных - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу узнать, какое самое быстрое время круга для конкретных гонок, которое будет определено с использованием названия гонки и даты гонки.

SELECT lapName AS Name, lapDate AS Date, T
FROM Lap 
    INNER JOIN Race ON Lap.lapName = Race.Name
        AND Lap.lapDate = Race.Date
GROUP BY Date;

В настоящее время отображаются только 3 разных названия рас с 4 разными датами, что означает, что у меня всего 4 комбинации, когда на самом деле существует 9 уникальных названий рас, комбинаций дат гонки.

Уникальные данные о расе хранятся в таблице Race.Время простоя хранится в таблице LapInfo.

Я также получаю предупреждение о своем заявлении группы о том, что оно неоднозначно, хотя все еще выполняется.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Вам не нужно join для этого:

SELECT l.lapRaceName, l.lapRaceDate, 
       MIN(l.lapTime)
FROM LapInfo l
GROUP BY l.lapRaceName, l.lapRaceDate;

Если вам не нужно JOIN, излишне указывать его в запросе.

0 голосов
/ 04 декабря 2018

Прежде всего, ваш запрос на самом деле неверный SQL.Вам нужно использовать функцию MIN, чтобы получить самый быстрый lapTime.Кроме того, вам нужно GROUP BY lapRaceName, raceDate вместо lapRaceName.К сожалению, в этом случае mysql достаточно слаб, чтобы выполнить его без ошибок.

Кроме того, вы СОЕДИНЯЕТЕ LapInfo с Race и возвращаете объединенные столбцы из LapInfo, которые вы называете псевдонимом, в качестве имен, которые могутможно найти в Race.Это нормально с точки зрения SQL, но это также очень сложно: возвращайте непосредственно столбцы из таблицы Race, так как они имеют имена, которые вы ищете.

Наконец, было бы гораздо лучшеуказать, к какой таблице принадлежит каждый столбец.Здесь столбец lapTime принадлежит таблице LapInfo, поэтому давайте сделаем это явным.

Запрос:

SELECT 
    Race.raceName,
    Race.raceDate, 
    MIN(LapInfo.lapTime)
FROM 
    Race 
    INNER JOIN LapInfo
        ON  LapInfo.lapRaceName = Race.raceName
        AND LapInfo.lapRaceDate = Race.raceDate
GROUP BY 
    Race.raceName,
    Race.raceDate
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...