Tôi đang cố gắng để làm như sauAVG của 3 câu SELECT với GROUP BY
Tôi có một QA bảng, trong đó có những điều sau đây:
TICKET_ID SKILL_ID SCORE USER
###############################################
1 10 15 USER1
1 20 5 USER1
1 30 95 USER1
2 40 20 USER1
2 50 40 USER1
3 60 70 USER1
3 70 15 USER1
một KỸ NĂNG bảng làm bằng:
SKILL_ID SKILL_NAME AREA_ID
10 SKILL1 1
20 SKILL2 1
30 SKILL3 2
40 SKILL4 2
50 SKILL5 2
60 SKILL6 3
70 SKILL7 3
và một bảng VÉ làm bằng:
TICKET_ID TICKET_NUMBER
1 AAA
2 BBB
3 CCC
QA có FK để VÉ sử dụng TICKET_ID và cũng là một FK để KỸ NĂNG sử dụng SKILL_ID
Những gì tôi sẽ cần phải làm là:
cho mỗi vé trong tầm kiểm soát bảng QA rằng tổng của điểm số trong mọi lĩnh vực làm không vượt quá 100 và nếu được tính là 0, sau đó thực hiện AVG của 3 kết quả và nhóm theo số thứ tự vé trong một bảng khác Vì vậy, đối với mỗi trường hợp, tôi sẽ cần tính điểm cho mỗi khu vực, nếu> 100 thì 0 người khác để lại giá trị ban đầu, sau đó đặt giá trị trung bình của 3 giá trị và nhóm theo số vé
Không chắc chắn nếu điều này là có thể
Vì vậy, có lẽ để tính toán số điểm của area_1 tôi thực hiện như sau:
SELECT DECODE(100 - SUM(SCORE),
100,100,
95,95,
90,90,
85,85,
80,80,
75,75,
70,70,
65,65,
60,60,
55,55,
50,50,
45,45,
40,40,
35,35,
30,30,
25,25,
20,20,
15,15,
10,10,
5,5,
0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 1) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
để tính toán số điểm của area_2 điều tương tự nhưng thay đổi điều kiện WHERE (WHERE AREA_ID = 2 thời điểm này):
SELECT DECODE(100 - SUM(SCORE),
100,100,
95,95,
90,90,
85,85,
80,80,
75,75,
70,70,
65,65,
60,60,
55,55,
50,50,
45,45,
40,40,
35,35,
30,30,
25,25,
20,20,
15,15,
10,10,
5,5,
0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 2) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
và để tính toán số điểm của area_3 điều tương tự nhưng thay đổi điều kiện WHERE (WHERE AREA_ID = 3):
SELECT DECODE(100 - SUM(SCORE),
100,100,
95,95,
90,90,
85,85,
80,80,
75,75,
70,70,
65,65,
60,60,
55,55,
50,50,
45,45,
40,40,
35,35,
30,30,
25,25,
20,20,
15,15,
10,10,
5,5,
0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 3) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
Mỗi người trong t khối của ông mang lại cho giá trị 1 là đầu ra
Những gì tôi đang cố gắng để đạt được là có như đầu ra AVG 3 khối bằng ticket_number
Tôi cố gắng để tổng hợp 3 khối tất cả cùng nhau nhưng nó không cho phép tôi :
SELECT DECODE(100 - SUM(SCORE),
100,100,
95,95,
90,90,
85,85,
80,80,
75,75,
70,70,
65,65,
60,60,
55,55,
50,50,
45,45,
40,40,
35,35,
30,30,
25,25,
20,20,
15,15,
10,10,
5,5,
0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 1) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
+
SELECT DECODE(100 - SUM(SCORE),
100,100,
95,95,
90,90,
85,85,
80,80,
75,75,
70,70,
65,65,
60,60,
55,55,
50,50,
45,45,
40,40,
35,35,
30,30,
25,25,
20,20,
15,15,
10,10,
5,5,
0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 2) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
+
SELECT DECODE(100 - SUM(SCORE),
100,100,
95,95,
90,90,
85,85,
80,80,
75,75,
70,70,
65,65,
60,60,
55,55,
50,50,
45,45,
40,40,
35,35,
30,30,
25,25,
20,20,
15,15,
10,10,
5,5,
0) SCORE_A1 FROM QA WHERE SKILL_ID IN(SELECT SKILL_ID FROM SKILLS WHERE AREA_ID = 3) AND TICKET_NUMBER = :P2_TICKET_NUMBER AND QA.USER = :P2_USER GROUP BY 1
Cảm ơn bạn
Xin lưu ý rằng với biểu thức DECODE nếu 100 - SUM (SCORE) không chia hết bởi 5 sẽ có kết quả là ZERO. I E. nếu 100 - SUM (SCORE) = 73 sẽ có 0. Đây có phải là điều bạn mong đợi không? – cha
Bạn có thể xác nhận bạn đang sử dụng chức năng Oracle ('DECODE')? –
Xin chào, cảm ơn cho trả lời, tôi đang sử dụng oracle 12c vì vậy có nó là chức năng giải mã oracle. Làm thế nào bạn sẽ kiểm tra thay vì sử dụng chức năng giải mã? Tôi đã thấy rằng bạn có thể nhúng một trường hợp bên trong một lựa chọn nhưng vấn đề chính là tôi không biết làm thế nào để đặt tất cả các togheter để có trung bình của 3 khu vực cho mỗi số vé Cảm ơn bạn – ChrisA