2014-10-20 25 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

相關問題