SQL query to check sudoku
CREATE TABLE sudoku (
row_no VARCHAR2(3),
c1 NUMBER,
c2 NUMBER,
c3 NUMBER,
c4 NUMBER,
c5 NUMBER,
c6 NUMBER,
c7 NUMBER,
c8 NUMBER,
c9 NUMBER
);
insert into sudoku values('R1',8,2,3,4,9,6,1,5,7);
insert into sudoku values('R2',7,5,4,2,1,8,3,9,6);
insert into sudoku values('R3',1,6,9,7,5,3,2,8,4);
insert into sudoku values('R4',3,8,7,9,6,2,4,1,5);
insert into sudoku values('R5',4,9,2,1,8,5,7,6,3);
insert into sudoku values('R6',5,1,6,3,7,4,9,2,8);
insert into sudoku values('R7',6,3,1,8,2,7,5,4,9);
insert into sudoku values('R8',9,4,8,5,3,1,6,7,2);
insert into sudoku values('R9',2,7,5,6,4,9,8,3,1);
commit;
select sum(c1) c1,sum(c2) c2,sum(c3) c3,sum(c4) c4,sum(c5) c5,sum(c6) c6,sum(c7) c7,sum(c8) c8,sum(c9) c9
from sudoku;
select row_no,c1+c2+c3+c4+c5+c6+c7+c8+c9
from sudoku;
select 'G'||ceil(rownum/3) G,
sum(C1+ C2+ C3) G1,
sum(C4+ C5+ C6) G2,
sum(C7+ C8+ C9) G3
from sudoku
group by ceil(rownum/3);
--------------
select * from (
select sum(c1) c1,sum(c2) c2,sum(c3) c3,sum(c4) c4,sum(c5) c5,sum(c6) c6,sum(c7) c7,sum(c8) c8,sum(c9) c9
from sudoku)
UNPIVOT(column_val for column_name in (c1,c2,c3,c4,c5,c6,c7,c8,c9));
select G||column_name group_name, column_val group_sum
from (
select 'G'||ceil(rownum/3) G,
sum(C1+ C2+ C3) G1,
sum(C4+ C5+ C6) G2,
sum(C7+ C8+ C9) G3
from sudoku
group by ceil(rownum/3))
UNPIVOT(column_val for column_name in (g1,g2,g3));
--------------
select case when sum(distinct column_val)=45 then 'RESOLVED' else 'NOT RESOLVED' end from (
select * from (
select sum(c1) c1,sum(c2) c2,sum(c3) c3,sum(c4) c4,
sum(c5) c5,sum(c6) c6,sum(c7) c7,sum(c8) c8,sum(c9) c9
from sudoku)
UNPIVOT(column_val for column_name in (c1,c2,c3,c4,c5,c6,c7,c8,c9))
union
select row_no,c1+c2+c3+c4+c5+c6+c7+c8+c9
from sudoku
union
select G||column_name group_name, column_val group_sum
from (
select 'G'||ceil(rownum/3) G,
sum(C1+ C2+ C3) G1,
sum(C4+ C5+ C6) G2,
sum(C7+ C8+ C9) G3
from sudoku
group by ceil(rownum/3))
UNPIVOT(column_val for column_name in (g1,g2,g3)));
update sudoku set c3=5 where row_no='R3';
select column_val, LISTAGG(column_name,',') within group (order by column_name),
case when column_val=45 then 'CORRECT' else 'INCORRECT' end result
from(
select * from (
select sum(c1) c1,sum(c2) c2,sum(c3) c3,sum(c4) c4,
sum(c5) c5,sum(c6) c6,sum(c7) c7,sum(c8) c8,sum(c9) c9
from sudoku)
UNPIVOT(column_val for column_name in (c1,c2,c3,c4,c5,c6,c7,c8,c9))
union
select row_no,c1+c2+c3+c4+c5+c6+c7+c8+c9
from sudoku
union
select G||column_name group_name, column_val group_sum
from (
select 'G'||ceil(rownum/3) G,
sum(C1+ C2+ C3) G1,
sum(C4+ C5+ C6) G2,
sum(C7+ C8+ C9) G3
from sudoku
group by ceil(rownum/3))
UNPIVOT(column_val for column_name in (g1,g2,g3)))
group by column_val
thank you sir , please share performance tuning videos also
ReplyDelete