aboutsummaryrefslogtreecommitdiff
path: root/challenge-253/luca-ferrari/plpgsql/ch-2.sql
blob: 80971effac2a412a0b429b68668f74c51dfd84fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
--
-- Perl Weekly Challenge 253
-- Task 2
-- See <https://perlweeklychallenge.org/blog/perl-weekly-challenge-253>
--

CREATE SCHEMA IF NOT EXISTS pwc253;

CREATE OR REPLACE FUNCTION
pwc253.task2_plpgsql( matrix int[][] )
RETURNS SETOF int
AS $CODE$
DECLARE
	current_row int[];
	c_ones int;
BEGIN
	CREATE TEMPORARY TABLE IF NOT EXISTS ones( r int, c int );
	TRUNCATE ones;

	FOR i IN 1 .. array_length( matrix, 1 ) LOOP
	    c_ones := 0;
	    FOR j IN 1 .. array_length( matrix, 2 ) LOOP
	    	c_ones := c_ones + matrix[ i ][ j ];
	    END LOOP;

    	    INSERT INTO ones
	    SELECT i, c_ones;

	END LOOP;

	RETURN QUERY
	SELECT r
	FROM ones
	ORDER BY c DESC, r ASC;


RETURN;
END
$CODE$
LANGUAGE plpgsql;