2016-11-19 31 views
0

我寫了一些sql語句,並且有一定的問題。SQL的錯誤,因爲以後凡在

SELECT uri, k.score_x 
    FROM uris 
    WHERE id IN (
    SELECT id, SUM(x) AS score_x 
     FROM keywords 
     WHERE key = 'key1' OR 
     key='key2' OR 
     key='key3' OR 
     key='key4' 
     GROUP BY id 
     HAVING COUNT(key) = 4 
) AS k 
    ORDER BY k.score_sum DESC; 

這是我的發言,但我的數據庫(PostgreSQL的),說有一個語法錯誤與我的「AS」。

但是北京時間問題? o.O我不明白

+2

你不能當'IN()'子句中定義的別名的子查詢。並且您的子查詢返回多個列 –

+1

要添加到juergen的答案,您必須在子查詢上使用JOIN來完成您試圖實現的任務。 – coladict

回答

0

你需要一個連接,如:

SELECT 
    uri, 
    sum(k.x) as score_x 
FROM uris u 
JOIN keywords k 
ON u.id = k.id 
WHERE k.key in ('key1', 'key2', 'key3', 'key4') 
ORDER BY score_x DESC; 

不知道你試圖用HAVING COUNT(鍵)= 4來表達,雖然。

0

你似乎想是這樣的:

SELECT u.uri, k.score_x 
FROM uris u JOIN 
    (SELECT id, SUM(x) AS score_x 
     FROM keywords 
     WHERE k.key in ('key1', 'key2', 'key3', 'key4') 
     GROUP BY id 
     HAVING COUNT(DISTINCT key) = 4 
    ) k 
    ON u.id = k.id 
ORDER BY k.score_sum DESC; 
+0

如果沒有JOIN,沒有辦法做到這一點嗎?是否可以按子查詢的表進行分組,但在頂級查詢中執行此操作。因爲子查詢中的order by不起作用。 – RayRayRay

+0

@RayRayRay。 。 。我不明白你的評論。在這個答案中,在子查詢中沒有'order by'。 –