2016-02-24 13 views
0

我有一個相同的像場的不同列的表格:統一不同的領域,並獲得高層更多的重複值

ID | Genre1 | Genre2 
    1 | Sci-fi | Drama 
    2 | Musical | Sci-fi 

我怎麼能獲得前5名的流派(兼顧列)? 我認爲一個好的辦法是得到這樣的:

Genre  Count 
Sci-fi  13    
Drama  11    

然後,我會用「TOP」這一點。

現在我使用:

SELECT TOP 5 Genre1, count(Genre1) AS times 
FROM Customer_Profile 
GROUP BY Genre1 
ORDER BY count(Genre1) DESC; 

它爲其中的一列,但我怎麼能將此爲了兼顧流派列? (我可能需要使用Union All,但我不知道如何)。

謝謝

+0

我建議你固定的數據模型,如果可能的話。相同「類型」的數據應該存儲在一個列中。如果後綴「1」和「2」很重要,那麼這些後綴也應該表示爲另一列中的可查詢*數據*,而不是嵌入列名稱中。例如。你應該有一個ID爲'ID,流派,排名'列的表格,並且你的示例數據有四行(對於ID 1和2,每行兩列) –

+0

使用的標記dbms。例如。 TOP是產品特定的! – jarlh

回答

0

使用UNION這樣的:

SELECT TOP 5 Genre,count(Genre) as Times 
FROM(select Genre1 as Genre FROM Customer_Profile 
    UNION ALL 
    select Genre2 FROM Customer_Profile) 
GROUP BY Genre 
ORDER BY count(Genre) DESC; 
0

嘗試union all

SELECT TOP 5 Genre, count(Genre) AS times 
FROM (
    select Genre1 Genre 
    from Customer_Profile 
    union all 
    select Genre2 Genre 
    from Customer_Profile 
) x 
GROUP BY Genre 
ORDER BY count(Genre) DESC; 
0

試試這個:

SELECT genre, 
     COUNT(*) 
FROM 
(SELECT genre1 AS genre 
FROM Customer_Profile 
UNION ALL 
SELECT genre2 AS genre 
FROM Customer_Profile 
) 
GROUP BY genre 
ORDER BY 2; 
相關問題