2010-06-18 47 views
2

我正在研究PostgreSQL中的搜索查询,并且我所做的一件事是通过匹配的参数数量对我的查询结果进行排序。我不知道如何做到这一点。有没有人有建议或解决方案?通过查询中的参数匹配计数进行搜索排序? PostgreSQL

Table 
brand  color  type  engine 
Ford  Blue  4-door V8 
Maserati Blue  2-door V12 
Saturn Green  4-door V8 
GM  Yellow 1-door V4 

Current Query 
SELECT brand FROM table WHERE color = 'Blue' or type = '4-door' or engine = 'V8' 

Result Should Be 
Ford  (3 match) 
Saturn (2 match) 
Maserati (1 match) 

回答

2

我想你应该能够做到:

ORDER BY 
    CASE WHEN color = 'Blue' THEN 1 ELSE 0 END + 
    CASE WHEN type = '4-door' THEN 1 ELSE 0 END + 
    CASE WHEN engine = 'V8' THEN 1 ELSE 0 END DESC 
+0

完美地工作。谢谢! – 2010-06-18 15:17:35

-1

对于MySQL它应该是这样的,

SELECT brand, 
IF(color = 'Blue',1,0)+IF(type = '4-door', 1,0)+IF(engine = 'V8',1,0) 
    AS num_matches 
FROM table WHERE color = 'Blue' or type = '4-door' or engine = 'V8' 

仔细检查,如果语法PostgreSQL的。 您也可以使用CASE。

+0

并添加“分类方式2说明”,给予正确的排序顺序。 – 2010-06-18 15:08:51

相关问题