打破 sqlite 查询的简单 WHERE 子句

bob*_*bob 0 sql sqlite

我在这里有一个工作查询:

SELECT tlt.name AS theme, COUNT(*) AS nsets
    FROM tlt
    INNER JOIN sets
    ON tlt.id = sets.theme_id
    GROUP BY tlt.name
    ORDER BY nsets DESC;
Run Code Online (Sandbox Code Playgroud)

但是当我添加 WHERE 子句时,sqlite 在 WHERE 子句“附近”抛出一个语法错误

SELECT tlt.name AS theme, COUNT(*) AS nsets
    FROM tlt
    INNER JOIN sets
    ON tlt.id = sets.theme_id
    GROUP BY tlt.name
    ORDER BY nsets DESC;
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么这个简单的 WHERE 子句会破坏这个查询。

Nic*_*ick 5

一个WHERE子句必须之前GROUP BY,而不是之后。但是您不能在WHERE子句中使用别名或聚合函数,因此您需要使用HAVING COUNT(*) > 50您当前拥有WHERE子句的位置。

SELECT tlt.name AS theme, COUNT(*) AS nsets
FROM tlt
INNER JOIN sets
ON tlt.id = sets.theme_id
GROUP BY tlt.name
HAVING COUNT(*) > 50
ORDER BY nsets DESC;
Run Code Online (Sandbox Code Playgroud)