我需要编写一个SQL查询来计算有多少电影标题与数据库中的20个或更多其他电影具有相同的第一个字。
例如,如果23部电影在标题中包含第一个单词“SHREK”,26部电影在标题中包含“PUPPY”字样,则输出应如下所示:
First_Word ________ Count
SHREK 23
PUPPY 26
答案 0 :(得分:1)
SELECT SUBSTR(FILM_TITLE, 1, INSTR(FILM_TITLE, ' ', 1) - 1),
COUNT(*)
FROM FILM_TABLE
GROUP BY SUBSTR(FILM_TITLE, 1, INSTR(FILM_TITLE, ' ', 1) - 1)
HAVING COUNT(*) >= 20;
答案 1 :(得分:1)
使用REGEXP_SUBSTR
WITH DATA AS(
SELECT 'SHREK THE MOVIE' str FROM dual UNION ALL
SELECT 'PUPPY THE MOVIE' FROM dual UNION ALL
SELECT 'SHREK THE MOVIE' FROM dual UNION ALL
SELECT 'PUPPY THE MOVIE' FROM dual UNION ALL
SELECT 'SHREK THE MOVIE' FROM dual
)
SELECT regexp_substr(str, '\w+') sub_str, count(*) sub_str
FROM DATA
GROUP BY regexp_substr(str, '\w+')
/
SUB_STR SUB_STR
--------------- ----------
SHREK 3
PUPPY 2
SQL>
使用SUBSTR + INSTR
WITH DATA AS(
SELECT 'SHREK THE MOVIE' str FROM dual UNION ALL
SELECT 'PUPPY THE MOVIE' FROM dual UNION ALL
SELECT 'SHREK THE MOVIE' FROM dual UNION ALL
SELECT 'PUPPY THE MOVIE' FROM dual UNION ALL
SELECT 'SHREK THE MOVIE' FROM dual
)
SELECT SUBSTR(str, 1, INSTR(str, ' ', 1) - 1) sub_str, count(*)
FROM DATA
GROUP BY SUBSTR(str, 1, INSTR(str, ' ', 1) - 1)
/
SUB_STR COUNT(*)
--------------- ----------
SHREK 3
PUPPY 2
SQL>
<强>更新强>
对于单字电影名称,上述SUBTR + INSTR
方法将失败。需要使用CASE
构造来修复它。
SQL> WITH DATA AS(
2 SELECT 'SHREK' str FROM dual UNION ALL
3 SELECT 'PUPPY THE MOVIE' FROM dual UNION ALL
4 SELECT 'SHREK THE MOVIE' FROM dual UNION ALL
5 SELECT 'PUPPY THE MOVIE' FROM dual UNION ALL
6 SELECT 'SHREK THE MOVIE' FROM dual
7 )
8 SELECT
9 CASE
10 WHEN INSTR(str, ' ', 1) = 0
11 THEN str
12 ELSE SUBSTR(str, 1, INSTR(str, ' ', 1) - 1)
13 END sub_str,
14 COUNT(*)
15 FROM DATA
16 GROUP BY
17 CASE
18 WHEN INSTR(str, ' ', 1) = 0
19 THEN str
20 ELSE SUBSTR(str, 1, INSTR(str, ' ', 1) - 1)
21 END
22 /
SUB_STR COUNT(*)
--------------- ----------
SHREK 3
PUPPY 2
SQL>