我需要编写一个SQL查询来计算有多少电影片头与数据库中的20个或更多其他电影具有相同的第一个单词。SQL检索包含相同第一个单词的值的数量?
例如,如果23层膜在标题包含在所述第一词“SHREK”和26层的膜包含在所述标题中的词“小狗”,输出应看起来像:
First_Word ________Count
SHREK 23
PUPPY 26
我需要编写一个SQL查询来计算有多少电影片头与数据库中的20个或更多其他电影具有相同的第一个单词。SQL检索包含相同第一个单词的值的数量?
例如,如果23层膜在标题包含在所述第一词“SHREK”和26层的膜包含在所述标题中的词“小狗”,输出应看起来像:
First_Word ________Count
SHREK 23
PUPPY 26
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;
使用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>
唯一问题是单个字的电影!只有'正则表达式'通过它.. – 2014-10-20 06:22:23
@MaheswaranRavisankar,很好的接收。添加了一个更新来回答。 – 2014-10-20 06:40:35
不能有超过20部同名电影:P – Nitish 2014-10-20 06:46:27
第一个开始的地方总是尝试一些... – 2014-10-20 05:08:12
对不起你们我尝试了各种方法,但他们没有工作,所以我也懒得上传到 – 2014-10-21 00:36:50