给定一个表,让我们称之为performance6a-使用表结构>>学生id |数学|历史|语言|科学
表内容-性能6A
我需要写一个查询,产生一个报告如下-
预期的查询输出
组计数基于两个类别,在这种情况下,通过或失败,然后主题。
请注意,这些操作是在无法规范化或重新设计的系统表上执行的。两个类别都可以增加数量(类别-通过/不通过可以增加到100,类别-受试者可以增加到~5k)
我尝试过:
(SELECT 'PASS' AS STATUS, 'MATH', COUNT(ID) FROM PERFORMANCE6A WHERE MATH > 30) UNION
(SELECT 'FAIL' AS STATUS, 'MATH', COUNT(ID) FROM PERFORMANCE6A WHERE MATH <= 30) UNION
(SELECT 'PASS' AS STATUS, 'HISTORY', COUNT(ID) FROM PERFORMANCE6A WHERE HISTORY > 30) UNION
(SELECT 'FAIL' AS STATUS, 'HISTORY', COUNT(ID) FROM PERFORMANCE6A WHERE HISTORY <= 30) UNION
(SELECT 'PASS' AS STATUS, 'LANGUAGE', COUNT(ID) FROM PERFORMANCE6A WHERE LANGUAGE > 30) UNION
(SELECT 'FAIL' AS STATUS, 'LANGUAGE', COUNT(ID) FROM PERFORMANCE6A WHERE LANGUAGE <= 30) UNION
(SELECT 'PASS' AS STATUS, 'SCIENCE', COUNT(ID) FROM PERFORMANCE6A WHERE SCIENCE > 30) UNION
(SELECT 'FAIL' AS STATUS, 'SCIENCE', COUNT(ID) FROM PERFORMANCE6A WHERE SCIENCE <= 30);
这个查询给了我正确的输出,但是执行时间超过了2秒。我正在寻找优化查询的方法。
2条答案
按热度按时间bvjxkvbb1#
如果先取消IVOT,然后再聚合:
piok6c0g2#
试试这个: