2014-10-20 45 views
-5

我需要编写一个SQL查询来计算有多少电影片头与数据库中的20个或更多其他电影具有相同的第一个单词。SQL检索包含相同第一个单词的值的数量?

例如,如果23层膜在标题包含在所述第一词“SHREK”和26层的膜包含在所述标题中的词“小狗”,输出应看起来像:

First_Word ________Count

SHREK   23 
    PUPPY   26 
+2

第一个开始的地方总是尝试一些... – 2014-10-20 05:08:12

+0

对不起你们我尝试了各种方法,但他们没有工作,所以我也懒得上传到 – 2014-10-21 00:36:50

回答

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

使用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> 
+0

唯一问题是单个字的电影!只有'正则表达式'通过它.. – 2014-10-20 06:22:23

+0

@MaheswaranRavisankar,很好的接收。添加了一个更新来回答。 – 2014-10-20 06:40:35

+0

不能有超过20部同名电影:P – Nitish 2014-10-20 06:46:27

相关问题