Mysql增量值对多个案例进行排序

时间:2015-03-23 11:43:03

标签: mysql

我有一个产品表,通过回答一组问题(可能是2或可能是6,但并不总是相同)我希望得到结果。每个答案都有color = greennoise > 69等规则。

现在我不想将这些规则用作WHERE来优化我的搜索结果,但我想在CASE上增加一个变量,这样我就可以ORDER真实的条件。我仍然掌握所有价值观,但那些更符合我客户需求的价值观最重要。

我已经尝试了很多,例如: SELECT a.*, b.*,COUNT(CASE WHEN (b.noise >= 1600) THEN 1 ELSE 0 END) as condition_true

但是我无法使用多个CASES。

示例数据:

产品表:

id    |    title
1     |    washing machine X
2     |    Washing Machine Y200
3     |    Even cooler washing machine

Productinfo表

id    |    noise    |    color    |    locked    | product_id
1     |    40       |    white    |    1         | 1
2     |    68       |    green    |    0         | 2
3     |    72       |    green    |    1         | 3

我将在输出表中使用的可能规则

  • b.noise> 42
  • b.color =“green”
  • b.locked = 1

我会喜欢这样的输出表

product_id    |    title                          |    condition_true
3             |    Even cooler washing machine    |    3  
2             |    Washing Machine Y200           |    2 
1             |    washing machine X              |    1 

2 个答案:

答案 0 :(得分:2)

CASE只返回一个值,COUNT需要多行。你可以添加它们。

SELECT a.*, b.*, (CASE WHEN b.noise >= 1600 THEN 1 ELSE 0 END) +
                 (CASE WHEN color = 'green' THEN 1 ELSE 0 END) AS relevance
FROM table1
ORDER BY relevance DESC

或者,缩写为MySQL:

SELECT a.*, b.*, (b.noise >= 1600) +
                 (color = 'green') AS relevance
FROM table1
ORDER BY relevance DESC

答案 1 :(得分:1)

COUNT不是您想要的,可以在使用GROUP BY时聚合多行的结果。

我会使用一系列IF() statements执行此操作,根据条件返回10(对于更重要的列或其他内容,您还可以返回更大的数字):

SELECT IF(b.noise >= 1600,1,0)+IF(b.ocl1 <= 3,1,0)+...;