2016-03-07 55 views
0


查找每個相關的屬性

我練習一些SQL,我想對以下問題的最重複值:

對於每一個酒店裏找到的時候更多的人去。 我有以下表格:

 
      GOESTO 
id_person id_pub time 
1   1  Daytime 
2   2  Night time 
3   3  All Day 
4   1  Daytime 
5   2  Night time 
6   1  All Day 
7   3  Daytime 
8   3  Night time 
9   3  Night time 
10   1  Night time 
 
     PUB 
id_pub pub_name cost 
1  pub1  123 
2  pub2  324 
3  pub3  345 

我想要得到的是類似以下內容:

 
pub_name time 

我想我應該用MAX和COUNT函數,但我不很確定我該怎麼做。它應該在Oracle數據庫中工作。

謝謝!

+0

數應加入上述查詢在聲明中,你也必須使用'HAVING'子句而不是where。 –

回答

0

試試這個:

WITH mydata AS (
     select id_pub, "TIME", count(*) as cnt 
     from GOESTO 
     group by id_pub, "TIME" 
) 
SELECT m.id_pub, m."TIME", m.cnt 
FROM mydata m 
JOIN (
    SELECT id_pub, max(cnt) as cnt 
    FROM mydata 
    GROUP BY id_pub 
) x 
ON (m.id_pub = x.id_pub AND m.cnt = x.cnt); 

或這一個

SELECT id_pub, "TIME" 
FROM (
    SELECT t.*, 
      dense_rank() over (partition by id_pub order by cnt desc) rnk 
    FROM (
      select id_pub, "TIME", count(*) as cnt 
      from GOESTO 
      group by id_pub, "TIME" 
    ) t 
) 
WHERE rnk = 1 

要得到名稱,而不是id_pub值需要用PUB

SELECT p.pub_name, q."TIME" 
FROM ( one_of_the_above_query)q 
JOIN PUB p 
ON p.id_pub = q.id_pub