отфильтровать все две таблицы, чтобы получить все данные - PullRequest
0 голосов
/ 11 декабря 2018

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

SELECT
    AVG(tbAnswers.averageScore)
FROM
    tbDrivers
LEFT JOIN tbAnswers ON tbDrivers.driverId = tbAnswers.driverId
WHERE
    tbDrivers.place = 'WDC'
GROUP BY
    tbDrivers.driverId 

Но когда я указываю диапазон дат, не получается получить данные водителей без ответа.

SELECT AVG(tbAnswers.averageScore)
FROM tbDrivers LEFT JOIN tbAnswers ON tbDrivers.driverId = tbAnswers.driverId
WHERE tbDrivers.place = 'WDC'
      AND answerDate BETWEEN '2018-11-28' AND '2018-12-03'
GROUP BY tbDrivers.driverId

Структура таблицы: structure

CREATE TABLE `tbAnswers` (
  `answerId` int(11) NOT NULL,
  `answerDate` date NOT NULL,
  `driverId` int(11) NOT NULL,
  `score1` int(11) NOT NULL,
  `score2` int(11) NOT NULL,
  `score3` int(11) NOT NULL,
  `averageScore` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tbAnswers` (`answerId`, `answerDate`, `driverId`, `score1`, `score2`, `score3`, `averageScore`) VALUES
(10, '2018-11-28', 1032, 0, 0, 0, 0),
(11, '2018-11-29', 1032, 9, 8, 3, 6.67),
(12, '2018-11-30', 1032, 0, 3, 2, 1.67),
(13, '2018-11-30', 1035, 10, 2, 10, 7.34),
(14, '2018-11-01', 1032, 5, 5, 5, 5),
(15, '2018-12-03', 1035, 5, 5, 7, 5.67);

CREATE TABLE `tbDrivers` (
  `driverId` int(11) NOT NULL,
  `nameSurname` varchar(32) NOT NULL,
  `place` varchar(64) NOT NULL,
  `plate` varchar(8) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `tbDrivers` (`driverId`, `nameSurname`, `place`, `plate`) VALUES
(1032, 'Nick Oliver', 'WDC', 'B16186D'),
(1033, 'Nicholas Keller', 'WDC', 'ACG8095'),
(1034, 'Felipe Mendez', 'WDC', 'C26106E'),
(1035, 'Lowell Butler', 'WDC', '5123QK');

Как я могу решить эту проблему?

Ответы [ 2 ]

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

Проблема возникает из-за того, что у вас нет записей для идентификатора диска в таблице tbanswers.

Либо сделайте запись в tbanswers, либо используйте запрос, заданный Forpas выше, либо используйте этот запрос

SELECT tbdrivers.driverid, 
       Avg(tbanswers.averagescore) 
FROM   tbdrivers 
       LEFT JOIN tbanswers 
              ON tbdrivers.driverid = tbanswers.driverid 
WHERE  tbdrivers.place = 'WDC' 
       AND answerdate BETWEEN '2018-11-28' AND '2018-12-03' 
        OR answerdate IS NULL 
GROUP  BY tbdrivers.driverid 
0 голосов
/ 11 декабря 2018

Используйте ваш запрос, который выбирает драйверы, которые имеют хотя бы 1 ответ, UNION драйверы, которые не имеют ответа:

(SELECT tbDrivers.driverId, AVG(tbAnswers.averageScore) AS avgscore
FROM tbDrivers LEFT JOIN tbAnswers ON tbDrivers.driverId = tbAnswers.driverId
WHERE tbDrivers.place = 'WDC'
      AND answerDate BETWEEN '2018-11-28' AND '2018-12-03'
GROUP BY tbDrivers.driverId )
UNION 
(SELECT t.driverId,  NULL AS avgscore
FROM tbDrivers t
WHERE
      NOT EXISTS (SELECT 1 FROM tbAnswers WHERE tbAnswers.driverId = t.driverId))
ORDER BY driverId

результат:

driverId    avgscore
1032        2.7800000111262
1033        (null)
1034        (null)
1035        6.505000114440918
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...