【问题标题】:Using a SELECT subquery with alias and FROM together将 SELECT 子查询与别名和 FROM 一起使用
【发布时间】:2019-07-31 04:10:11
【问题描述】:

我正在尝试对别名子查询进行计数和来自,但无法弄清楚如何添加过滤部分:

SELECT  webpages.*, (select count(*) 
                     from webpage_opportunities 
                     where webpage_opportunities.webpage_id = webpages.id) as test_count 
FROM "webpages" 
WHERE (webpages.clicks IS NOT NULL) AND "webpages"."website_id" = 144 AND test_count = 0
GROUP BY webpages.id ORDER BY "webpages"."clicks" DESC LIMIT 50 OFFSET 0

当我删除AND test_count = 0 时,查询结果中会显示test_count 列,但是一旦添加它,查询就会失败。我还需要确保子查询连接到网页表,如上面 thje join 中所述。

【问题讨论】:

标签: sql postgresql


【解决方案1】:
SELECT  w.*, COUNT(wo.id) -- but will be 0 because the HAVING
FROM webpages w
LEFT JOIN webpage_opportunities wo
  ON w.id = wo.webpage_id
WHERE (w.clicks IS NOT NULL) 
  AND w."website_id" = 144
GROUP BY w.id 
HAVING COUNT(wo.id) = 0
ORDER BY w."clicks" DESC 
       , COUNT(wo.id) -- optional
LIMIT 50 OFFSET 0

【讨论】:

  • 有一个小错字,但这可能会成功! ` SELECT w.*,(从webpage_opportunities 中选择count(*),其中webpage_opportunities.webpage_id = w.id)作为test_count FROM 网页w 左加入webpage_opportunities wo ON w.id = wo.webpage_id WHERE(w.clicks 不为NULL)和w."website_id" = 144 GROUP BY w.id HAVING COUNT(wo.id) = 0 ORDER BY w."clicks" DESC LIMIT 50 OFFSET 0 `
  • 我认为您不需要它,因为您按 test_count = 0 过滤?
  • 我将COUNT() 添加到选择中
  • 我们可能会做类似HAVING COUNT(wo.id) > 5 这样的事情,然后我们想要显示并按测试计数排序。
  • 我不确定是什么错字?但是您不需要子查询来计算COUNT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2022-01-03
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多