这是我的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;