MYSQL查询-左联接被跳过,结果错误

时间:2019-01-21 00:38:55

标签: mysql sql subquery

这是我的SQLFiddle-http://www.sqlfiddle.com/#!9/9de13b/1

如果我从下面的查询中删除以下内容,它仍然给出相同的结果(在我的数据库中,有不同年份,学期和课程的数据):

 WHERE 
      Assignments.Year = '2018' 
      AND Assignments.CourseNumber = 'PHED 1164' 
      AND Assignments.Semester = 'fall' 
      AND Assignments.Assignment = 'Fitbit'

查询:

SELECT 
  c.username AS Username, 
  ROUND(
    LEAST(
      GREATEST(
        AVG(
          activities.fairly_act_min + activities.vact_min
        )/(
          (
            c.max_avgweeklymin - c.min_avgweeklymin
          )/ c.max_percent
        ), 
        AVG(activities.steps)/(
          (c.max_avgsteps - c.min_avgsteps)/ c.max_percent
        )- c.max_percent
      ), 
      100
    ), 
    1
  ) AS 'Activity Log Points Grade', 
  '#' AS 'End-of-Line Indicator' 
FROM 
  activities 
  JOIN (
    SELECT 
      Students.encodedid, 
      Students.username, 
      g.* 
    FROM 
      Assignments 
      LEFT JOIN Students ON Assignments.SectionNumber = Students.SectionNumber 
      LEFT JOIN (
        SELECT 
          section, 
          MAX(avgweeklymin) max_avgweeklymin, 
          MIN(avgweeklymin) min_avgweeklymin, 
          MAX(percent) max_percent, 
          MAX(avgsteps) max_avgsteps, 
          MIN(avgsteps) min_avgsteps 
        FROM 
          GradingScale 
        GROUP BY 
          section
      ) g ON Assignments.SectionNumber = g.section 
    WHERE 
      Assignments.Year = '2018' 
      AND Assignments.CourseNumber = 'PHED 1164' 
      AND Assignments.Semester = 'fall' 
      AND Assignments.Assignment = 'Fitbit'
  ) c ON activities.encodedid <> '' 
  AND activities.encodedid = c.encodedid 
  JOIN (
    SELECT 
      id, 
      encodedid, 
      GROUP_CONCAT(
        fairly_act_min + vact_min 
        ORDER BY 
          (fairly_act_min + vact_min)* 1 DESC
      ) grouped_steps 
    FROM 
      activities 
    GROUP BY 
      encodedid, 
      WEEK(
        DATE_ADD(activitydate, INTERVAL 1 DAY)
      )
  ) p ON activities.id = p.id 
  AND FIND_IN_SET(
    fairly_act_min + vact_min, grouped_steps
  ) <= 5 
GROUP BY 
  c.encodedid;

我不明白为什么我的WHERE被忽略。如何重写该查询以输出正确的结果?

这就是我想要做的: 我正在使用活动跟踪器跟踪学生的活动和步骤。根据他们的活动为他们分配每周等级。他们会按照一周中前5天的最佳成绩进行评分。步数等级和活动分钟数等级基于步数和活动分钟的每周平均分数。最终成绩的依据是,在“步骤”成绩和“活动分钟”成绩之间的评分等级较高。

我在这里发布的查询将在学期末运行,以计算每个学生的最终分数。

这是我当前的输出:

用户名,活动日志点等级,行尾指示器 mousel,44.4,#

这是我的预期输出:

Username| Activity Log Points Grade| End-of-Line Indicator|
mousel  |        24                |         #            |

我希望这是有道理的!

预先感谢

蒂姆

这是我的模式:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";

CREATE TABLE `activities` (
  `id` int(11) NOT NULL,
  `steps` mediumint(6) UNSIGNED DEFAULT NULL,
  `lightly_act_min` varchar(50) NOT NULL,
  `fairly_act_min` varchar(50) NOT NULL,
  `sed_act_min` varchar(50) NOT NULL,
  `vact_min` varchar(50) NOT NULL,
  `encodedid` varchar(25) NOT NULL,
  `activitydate` date NOT NULL,
  `username` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `activities` (`id`, `steps`, `lightly_act_min`, `fairly_act_min`, `sed_act_min`, `vact_min`, `encodedid`, `activitydate`, `username`) VALUES
(76139, 9416, '254', '72', '642', '75', '29BD68', '2018-10-01', ''),
(106553, 0, '0', '0', '1440', '0', '29BD68', '2018-08-28', ''),
(106554, 126, '6', '0', '1434', '0', '29BD68', '2018-08-29', ''),
(106555, 9768, '257', '57', '629', '73', '29BD68', '2018-08-30', ''),
(106556, 4884, '150', '20', '865', '14', '29BD68', '2018-08-31', ''),
(106557, 7246, '170', '81', '778', '56', '29BD68', '2018-09-01', ''),
(106575, 0, '18', '5', '1018', '33', '29BD68', '2018-09-19', ''),
(106576, 65, '20', '21', '1366', '33', '29BD68', '2018-09-20', ''),
(106577, 34, '13', '3', '1331', '25', '29BD68', '2018-09-21', ''),
(106578, 18, '5', '0', '1435', '0', '29BD68', '2018-09-22', ''),
(106579, 32, '0', '0', '1440', '0', '29BD68', '2018-09-23', ''),
(106580, 6, '0', '0', '1440', '0', '29BD68', '2018-09-24', ''),
(106581, 10320, '251', '121', '585', '34', '29BD68', '2018-09-25', ''),
(106582, 5974, '236', '32', '723', '3', '29BD68', '2018-09-26', ''),
(106583, 8455, '239', '47', '733', '27', '29BD68', '2018-09-27', ''),
(106584, 6262, '204', '71', '765', '10', '29BD68', '2018-09-28', ''),
(123953, 40, '1', '0', '1439', '0', '29BD68', '2018-11-11', ''),
(123954, 639, '48', '0', '1392', '0', '29BD68', '2018-11-12', ''),
(123955, 5878, '270', '76', '485', '36', '29BD68', '2018-11-13', ''),
(123956, 7485, '330', '81', '1014', '15', '29BD68', '2018-11-14', ''),
(123957, 5372, '270', '53', '545', '0', '29BD68', '2018-11-15', ''),
(124888, 4699, '214', '12', '825', '6', '29BD68', '2018-11-16', ''),
(125819, 0, '2', '0', '1438', '0', '29BD68', '2018-11-17', ''),
(126750, 0, '0', '0', '1440', '0', '29BD68', '2018-11-18', ''),
(129533, 5070, '279', '14', '728', '14', '29BD68', '2018-11-19', ''),
(129534, 6471, '256', '124', '657', '15', '29BD68', '2018-11-20', ''),
(129535, 3475, '144', '9', '722', '29', '29BD68', '2018-11-21', ''),
(131405, 232, '16', '0', '965', '0', '29BD68', '2018-11-22', ''),
(131406, 3546, '135', '1', '791', '18', '29BD68', '2018-11-23', ''),
(133276, 6143, '278', '71', '657', '24', '29BD68', '2018-11-24', '');

ALTER TABLE `activities`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `encodedid` (`encodedid`,`activitydate`) USING BTREE;

ALTER TABLE `activities`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=230103;
COMMIT;

CREATE TABLE `Assignments` (
  `AssignmentID` int(11) NOT NULL,
  `Assignment` enum('Fitbit','Written Paper','Fitness Assessment') NOT NULL,
  `PointsPossible` int(11) NOT NULL DEFAULT 0,
  `CourseNumber` varchar(90) NOT NULL,
  `SectionNumber` varchar(8) NOT NULL,
  `Semester` enum('Fall','Spring','Summer1','Summer2','Winter','May') NOT NULL,
  `Year` year(4) NOT NULL,
  `PreStartDate` datetime NOT NULL,
  `PreEndDate` datetime NOT NULL,
  `PostStartDate` datetime NOT NULL,
  `PostEndDate` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `Assignments` (`AssignmentID`, `Assignment`, `PointsPossible`, `CourseNumber`, `SectionNumber`, `Semester`, `Year`, `PreStartDate`, `PreEndDate`, `PostStartDate`, `PostEndDate`) VALUES
(47, 'Fitbit', 100, 'PHED 1164', '5073', 'Fall', 2018, '2018-09-03 00:00:00', '2018-12-07 23:30:00', '2018-09-03 00:00:00', '2018-12-07 23:30:00'),
(48, 'Fitbit', 100, 'PHED 1164', '5075', 'Fall', 2018, '2018-09-03 00:00:00', '2018-12-07 23:30:00', '2018-09-03 00:00:00', '2018-12-07 23:30:00'),
(49, 'Fitbit', 100, 'PHED 1164', '5019', 'Fall', 2018, '2018-09-03 00:00:00', '2018-12-12 23:30:00', '2018-09-03 00:00:00', '2018-12-12 23:30:00'),
(61, 'Fitness Assessment', 100, 'PHED 1164', '5087', 'Fall', 2018, '2018-09-23 00:00:00', '2018-10-01 23:30:00', '2018-11-30 00:00:00', '2018-12-07 23:30:00');

ALTER TABLE `Assignments`
  ADD PRIMARY KEY (`AssignmentID`);
ALTER TABLE `Assignments` ADD FULLTEXT KEY `section_number_index` (`SectionNumber`);

ALTER TABLE `Assignments`
  MODIFY `AssignmentID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=91;
COMMIT;

CREATE TABLE `Students` (
  `id` bigint(20) NOT NULL,
  `SectionNumber` varchar(8) NOT NULL,
  `first` varchar(30) NOT NULL,
  `last` varchar(30) NOT NULL,
  `username` varchar(50) NOT NULL DEFAULT '',
  `semester` enum('fall','spring','summer1','summer2','winterminimester','mayminimester') NOT NULL,
  `year` year(4) NOT NULL,
  `CourseNumber` varchar(90) NOT NULL,
  `passtext` varchar(255) NOT NULL DEFAULT '',
  `email` varchar(200) NOT NULL DEFAULT '',
  `created` date DEFAULT NULL,
  `active` enum('y','n') NOT NULL DEFAULT 'y',
  `visitorIP` varchar(15) NOT NULL DEFAULT '',
  `aboutme` text NOT NULL,
  `age` char(3) NOT NULL DEFAULT '',
  `regkey` varchar(25) NOT NULL DEFAULT '',
  `goal_start` date NOT NULL,
  `goal` enum('muscle','weight','perform','toning') NOT NULL,
  `encodedid` varchar(25) NOT NULL,
  `accesstoken` varchar(2000) NOT NULL,
  `accesstoken_expiry` datetime DEFAULT NULL,
  `refreshtoken` varchar(2000) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `Students` (`id`, `SectionNumber`, `first`, `last`, `username`, `semester`, `year`, `CourseNumber`, `passtext`, `email`, `created`, `active`, `visitorIP`, `aboutme`, `age`, `regkey`, `goal_start`, `goal`, `encodedid`, `accesstoken`, `accesstoken_expiry`, `refreshtoken`) VALUES
(8, '5075', 'Tim', 'Mousel', 'mousel', 'fall', 2018, 'PHED 1164', '$2y$12$FDSvsMUpSQ79THcC6eCij.YjDFbwGQhHozvcJVa81tD4oYKAyrRi2', 'mousel@defend.net', '2018-03-26', 'y', '99.165.89.33', '', '', '8630082118400458833008407', '0000-00-00', 'muscle', '29BD68', 'eyJhbGciOiJIUzI1NiJ9.eyJhdWQiOiIyMkNWWkYiLCJzdWIiOiIyOUJENjgiLCJpc3MiOiJGaXRiaXQiLCJ0eXAiOiJhY2Nlc3NfdG9rZW4iLCJzY29wZXMiOiJyd2VpIHJhY3QgcmhyIHJwcm8gcm51dCIsImV4cCI6MTU0ODA1NjI0MywiaWF0IjoxNTQ4MDI3NDQzfQ.K5Pag0_4EfME21I5aUrPqwPE-otPQH458jidDl1FvgM', '2019-01-21 07:37:23', '1498d6c65ceaa43daf5a40db4af60a16a9cb37b96d86de3635c1a4ff89723574');

ALTER TABLE `Students`
  ADD PRIMARY KEY (`id`);
ALTER TABLE `Students` ADD FULLTEXT KEY `encodedid_index` (`encodedid`);

ALTER TABLE `Students`
  MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=459;
COMMIT;

CREATE TABLE `GradingScale` (
  `id` int(11) NOT NULL,
  `letter` enum('A','B','C','D','F') NOT NULL,
  `percent` smallint(4) NOT NULL,
  `avgsteps` smallint(6) NOT NULL,
  `avgweeklymin` smallint(4) NOT NULL,
  `section` varchar(8) NOT NULL,
  `AssignmentID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Grading Scale';


INSERT INTO `GradingScale` (`id`, `letter`, `percent`, `avgsteps`, `avgweeklymin`, `section`, `AssignmentID`) VALUES
(1101, 'A', 100, 10000, 100, '5075', 1),
(1102, 'A', 90, 9500, 90, '5075', 1),
(1103, 'B', 80, 9000, 80, '5075', 1),
(1104, 'C', 70, 8500, 70, '5075', 1),
(1105, 'D', 60, 8000, 60, '5075', 1),
(1106, 'F', 50, 7500, 50, '5075', 1),
(1107, 'F', 40, 7000, 40, '5075', 1),
(1108, 'F', 30, 6500, 30, '5075', 1),
(1109, 'F', 20, 6000, 20, '5075', 1),
(1110, 'F', 10, 5500, 10, '5075', 1),
(1111, 'F', 0, 5000, 0, '5075', 1);

ALTER TABLE `GradingScale`
  ADD PRIMARY KEY (`id`) USING BTREE,
  ADD UNIQUE KEY `section` (`section`,`percent`,`letter`) USING BTREE;

0 个答案:

没有答案