我有一个表漏洞,我想从中查询按严重性(列)排序的记录.严重性列保持值"高","中","低".
下面给出的查询给出了错误:
对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中"
SELECT DISTINCT vuln
FROM Vulnerabilities vuln
WHERE (lower(vuln.dsc) LIKE '%tomcat%')
ORDER BY CASE vuln.severity
WHEN 'High' THEN 1
WHEN 'Medium' THEN 2
WHEN 'Low' THEN 3
END ASC
Run Code Online (Sandbox Code Playgroud)
使用子查询:
SELECT *
FROM (
SELECT DISTINCT *
FROM Vulnerabilities vuln
WHERE lower(dsc) LIKE '%tomcat%'
) sub
ORDER BY CASE severity
WHEN 'High' THEN 1
WHEN 'Medium' THEN 2
WHEN 'Low' THEN 3
END;
Run Code Online (Sandbox Code Playgroud)
或者将ORDER BY表达式作为SELECT列表的一部分:
SELECT DISTINCT
CASE severity
WHEN 'High' THEN 1
WHEN 'Medium' THEN 2
WHEN 'Low' THEN 3
END AS severity_order, *
FROM Vulnerabilities vuln
WHERE lower(dsc) LIKE '%tomcat%'
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
但机会是,你根本不想要DISTINCT *.就像@a_horse评论的那样,这只对完全重复有意义,这是一种罕见的情况,只有在你没有定义任何唯一的列(如PK!)时才有可能.
DISTINCT可能是多余的噪音.或者您的示例可能是更复杂查询的简化,或者您真的只想GROUP BY/ DISTINCT ON几个选定的列.对于后者,这是一个更有用的相关答案:
基础知识DISTINCT ON:
| 归档时间: |
|
| 查看次数: |
10890 次 |
| 最近记录: |