Вот мой 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;
Я не понимаю, почему игнорируется мое ГДЕ.Как можно переписать этот запрос для получения правильного результата?
Вот что я пытаюсь сделать: я отслеживаю активность своих учеников и шаги, используя трекер активности.Им присваивается еженедельная оценка в зависимости от их активности.Они оцениваются по лучшим 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;