Strings Statistics
Description
You are collecting some statistics about strings in the table strs, which only has one column:
- str - a unique string that consists only of lowercase English letters. Your goal is to return a new table ans, which has the following columns:
- letter - a unique lowercase English letter;
- total - the total number of occurrences of this letter in all the strings from table strs;
- occurrence - the number of strings from table strs in which this letter occurs at least once;
- max_occurrence - the maximal number of occurrences of this letter in a single string;
- max_occurence_reached - the number of strings in which this maxumal number of occurrences is reached.
The rows should be ordered lexicographically by letter
. For letters that are not contained in the strs table, don’t add a row to the output table (i.e., all integers in the total
column should be positive).
Example
For the following tables strs
str |
---|
aa |
aaaa |
aab |
abaaba |
bbbbb |
the output should be
letter | total | occurrence | max_occurrence | max_occurrence_reached |
---|---|---|---|---|
a | 12 | 4 | 4 | 2 |
b | 8 | 3 | 5 | 1 |
- [execution time limit] 10 seconds (mysql)
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*Please add ; after each select statement*/
CREATE PROCEDURE stringsStatistics()
BEGIN
DECLARE c INT DEFAULT 97;
DROP TABLE IF EXISTS alpha;
CREATE TEMPORARY TABLE alpha (letter VARCHAR(2));
WHILE c <= 122 DO
INSERT INTO alpha VALUES(CHAR(c));
SET c = c + 1;
END WHILE;
SELECT letter,
CHAR_LENGTH(tstring) - CHAR_LENGTH(REPLACE(tstring, letter, '')) AS total,
(SELECT COUNT(*) FROM strs WHERE INSTR(str, letter) > 0) AS occurrence,
(SELECT MAX(CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, letter, ''))) FROM strs) as max_occurrence,
(SELECT COUNT(*) FROM strs WHERE (CHAR_LENGTH(str) - CHAR_LENGTH(REPLACE(str, letter, ''))) = max_occurrence) as max_occurrence_reached
FROM alpha, (SELECT GROUP_CONCAT(str SEPARATOR '') AS tstring FROM strs) t
HAVING total > 0;
END