我有一个产品表,通过回答一组问题(可能是2或可能是6,但并不总是相同)我希望得到结果。每个答案都有color = green
或noise > 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
我将在输出表中使用的可能规则
我会喜欢这样的输出表
product_id | title | condition_true
3 | Even cooler washing machine | 3
2 | Washing Machine Y200 | 2
1 | washing machine X | 1
答案 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
执行此操作,根据条件返回1
或0
(对于更重要的列或其他内容,您还可以返回更大的数字):
SELECT IF(b.noise >= 1600,1,0)+IF(b.ocl1 <= 3,1,0)+...;