Roc*_*nja 1 postgresql postgresql-9.2 postgresql-9.3
我有以下选择,它是从带有列的表中选择的:
id、project_id、keyword_id、位置、数据示例:
i, p_id, k_id, p
1, 1, 1, 4
2, 1, 1, 5
3, 1, 1, 6
5, 1, 2, 7
6, 1, 2, 8
7, 1, 3, 5
8, 1, 3, 7
Run Code Online (Sandbox Code Playgroud)
询问
SELECT
pr.project_id,
COUNT(DISTINCT pr.keyword_id) as total_keywords,
COUNT(CASE WHEN position BETWEEN 4 AND 10 THEN position ELSE NULL END ) AS pos4,
date(pr.created_at) AS created_at
FROM
project_reports pr
GROUP BY pr.project_id, date(created_at)
Run Code Online (Sandbox Code Playgroud)
我只想在 pos 4-10 中获取不同的 keyword_id 的数量。但是使用我的SELECT
我得到了所有这些。
预期数据示例:
p_id, total_keywords, pos4
1, 3, 3
Run Code Online (Sandbox Code Playgroud)
我当前的数据输出
p_id, total_keywords, pos4
1, 3, 7
Run Code Online (Sandbox Code Playgroud)
如果您想要不同的关键字,那么您需要计算keyword_id
,而不是position
列。
所以你的表达:
COUNT(CASE WHEN position BETWEEN 4 AND 10 THEN position ELSE NULL END )
Run Code Online (Sandbox Code Playgroud)
变成:
COUNT(distinct CASE WHEN position BETWEEN 4 AND 10 THEN keyword_id ELSE NULL END )
Run Code Online (Sandbox Code Playgroud)
所以最后的声明是:
SELECT
pr.project_id,
COUNT(DISTINCT pr.keyword_id) as total_keywords,
count(distinct CASE WHEN position BETWEEN 4 AND 10 THEN keyword_id ELSE NULL END ) AS pos4
FROM
project_reports pr
GROUP BY pr.project_id;
Run Code Online (Sandbox Code Playgroud)
SQLFiddle 示例:http ://sqlfiddle.com/#!15/b1015/1