MySQL:如何通过对特殊记录给予特定分数来对select进行排序
我有一个简单的表格,例如:MySQL:如何通过对特殊记录给予特定分数来对select进行排序,mysql,sql,select,Mysql,Sql,Select,我有一个简单的表格,例如: id | name | category ------------------------ 1 | banana | 1 2 | orange | 1 3 | fruit | 1 4 | potato | 2 5 | car | 0 我有很多特殊的过滤器,应该为列表指定一个特殊的分数来显示。 以下是此示例的机制: 如果名称为香蕉或橙色,则分数=分数+2 如果名称为水果,则分数=分数+1 如果名称为马铃薯,则分数=分数+0 如果类别>0,分数=分
id | name | category
------------------------
1 | banana | 1
2 | orange | 1
3 | fruit | 1
4 | potato | 2
5 | car | 0
我有很多特殊的过滤器,应该为列表指定一个特殊的分数来显示。
以下是此示例的机制:
如果名称为香蕉或橙色,则分数=分数+2
如果名称为水果,则分数=分数+1
如果名称为马铃薯,则分数=分数+0
如果类别>0,分数=分数+1
所以在我的结果中我需要
id | name | category | score
-------------------------------
1 | banana | 1 | 3 ( condition 1+4)
2 | orange | 1 | 3 ( condition 1+4)
3 | fruit | 1 | 2 ( condition 2+4)
4 | potato | 2 | 1 ( condition 3+4)
5 | car | 0 | 0 ( no match)
最后我想按分数排序结果。
我无法创建新列,因为条件是由用户选择的。
什么是MySQL查询?一种可能的方法:
SELECT id, name, category,
IF(category > 0, 1, 0) +
(CASE name WHEN 'banana' THEN 2
WHEN 'orange' THEN 2
WHEN 'fruit' THEN 1
ELSE 0 END)
AS score
FROM ttt
ORDER BY score DESC
一种可能的办法:
SELECT id, name, category,
IF(category > 0, 1, 0) +
(CASE name WHEN 'banana' THEN 2
WHEN 'orange' THEN 2
WHEN 'fruit' THEN 1
ELSE 0 END)
AS score
FROM ttt
ORDER BY score DESC
您可以这样做:
SELECT
id,
name,
category,
nameCondition + catCondition AS Score
FROM
(
SELECT
id, name, category,
CASE
WHEN name IN ('banana', 'orange') THEN 2
WHEN name = 'fruit' THEN 1
WHEN name = 'potato' THEN 0
ELSE 0
END AS nameCondition,
CASE
WHEN category > 0 THEN 1
ELSE 0
END AS catCondition
FROM tablename
) AS t;
这将为您提供:
| ID | NAME | CATEGORY | SCORE |
----------------------------------
| 1 | banana | 1 | 3 |
| 2 | orange | 1 | 3 |
| 3 | fruit | 1 | 2 |
| 4 | potato | 2 | 1 |
| 5 | car | 0 | 0 |
您可以这样做:
SELECT
id,
name,
category,
nameCondition + catCondition AS Score
FROM
(
SELECT
id, name, category,
CASE
WHEN name IN ('banana', 'orange') THEN 2
WHEN name = 'fruit' THEN 1
WHEN name = 'potato' THEN 0
ELSE 0
END AS nameCondition,
CASE
WHEN category > 0 THEN 1
ELSE 0
END AS catCondition
FROM tablename
) AS t;
这将为您提供:
| ID | NAME | CATEGORY | SCORE |
----------------------------------
| 1 | banana | 1 | 3 |
| 2 | orange | 1 | 3 |
| 3 | fruit | 1 | 2 |
| 4 | potato | 2 | 1 |
| 5 | car | 0 | 0 |