簡體   English   中英

SUM列上的HAVING子句

[英]HAVING clause on SUM column

我想在總分列中有一個從總和中得出的條件,但是如果我將其放在分組依據之后,則HAVING score = <1不起作用。 那必須向我展示具有良好分數的項目。 我正在使用hsqldb,怎么了? 我收到“用戶缺少特權或找不到對象:分數”

SELECT p.id, p.project_name, SUM(CASE r.type_code 
    WHEN 'GOOD' THEN  1 
    WHEN 'VERY_GOOD' THEN  1 
    WHEN 'BAD' THEN -1 
    WHEN 'VERY_BAD' THEN -1 
    ELSE 0 END) AS score
FROM record_project AS rp
JOIN project AS p ON p.id = rp.project_id 
JOIN record AS r ON r.id = rp.record_id 
GROUP BY p.id, p.project_name
HAVING score =< 1        <<<---- wrong?!
ORDER BY score DESC LIMIT 1

您應該使用整個計算列,

SELECT p.id, p.project_name,
       SUM(CASE WHEN r.type_code IN ('GOOD','VERY_GOOD') THEN 1
                WHEN r.type_code IN ('BAD','VERY_BAD') THEN -1
                ELSE 0 END) score
FROM   record_project AS rp
       JOIN project AS p ON p.id = rp.project_id 
       JOIN record AS r ON r.id = rp.record_id 
GROUP  BY p.id, p.project_name
HAVING SUM(CASE WHEN r.type_code IN ('GOOD','VERY_GOOD') THEN 1
                WHEN r.type_code IN ('BAD','VERY_BAD') THEN -1
                ELSE 0 END) <= 1
ORDER  BY score DESC 
-- LIMIT  1

您可以將HAVING作為WHERE合並到子查詢中:

SELECT * FROM ( 
  SELECT p.id, p.project_name, SUM(CASE r.type_code 
    WHEN 'GOOD' THEN  1 
    WHEN 'VERY_GOOD' THEN  1 
    WHEN 'BAD' THEN -1 
    WHEN 'VERY_BAD' THEN -1 
    ELSE 0 END) AS score
  FROM record_project AS rp
  JOIN project AS p ON p.id = rp.project_id 
  JOIN record AS r ON r.id = rp.record_id 
  GROUP BY p.id, p.project_name) x
WHERE score =< 1
ORDER BY score DESC
LIMIT 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM