2016-07-12 17 views
0

Ich versuche Prozentsatz des Seitentypen zu finden, Bewertung mit weniger als 20Wie Prozent einer Spalte in Top 20 SQL erhalten?

Meine Tabelle wie folgt aussieht:

requestId rank pageType  
MMCVS  0  HOME   
MMCVS  1  MOBILE  
MMCVS  2  HOME 
BBVSS  0  HOME   
BBVSS  11  MOBILE  
BBVSS  12  HOME 

bisher habe ich versucht:

select pageType, Top20, Top20/count(DISTINCT requestId) as Percentage 
    from (
    SELECT 
     pageType, requestId, 
     SUM(CASE WHEN rank <= 20 THEN 1 ELSE 0 END) as Top20 
    FROM 
     tempTable 
    group by pageType, requestId) tempTable group by pageType 

Aber Fehler bekommen:

expression 'Top20' is neither present in the group by, nor is it an aggregate function. 

Antwort

0

Ja, Sie müssen jedes nicht-Aggrega hinzufügen ted-Felder in Gruppen nach Feldlisten. Obwohl MySQL Ihnen keinen Fehler gibt, auch wenn Sie es nicht tun.

Für diese Angelegenheit, entweder Sie Top20 in Gruppe hinzufügen, indem Sie oder entfernen Top20 aus wählen:

SELECT pageType, Top20/count(DISTINCT requestId) as Percentage 
FROM (
    SELECT pageType, requestId, 
    SUM(CASE WHEN rank <= 20 THEN 1 ELSE 0 END) as Top20 
    FROM tempTable 
    GROUP BY pageType, requestId 
) tempTable 
GROUP BY pageType 

http://sqlfiddle.com/#!9/e7eb89/4

Verwandte Themen