我的数据库架构如下:
CREATE TABLE test (
id INT(11) UNSIGNED PRIMARY KEY,
title VARCHAR(255) NOT NULL,
priority ENUM('low', 'medium', 'high') NOT NULL
);
INSERT INTO test (id, title, priority) VALUES (1, 'test', 'medium');
INSERT INTO test (id, title, priority) VALUES (2, 'test', 'high');
INSERT INTO test (id, title, priority) VALUES (3, 'test2', 'low');
我的查询如下:
SELECT * FROM test
ORDER BY FIELD(priority, 'high', 'medium', 'low');
我想基于DISTINCT
场在title
场上做一个priority
。例如,如果有两个或多个具有相同title
的数据,我想只选择具有最高优先级的数据,因此在我的情况下,预期结果将是id为2和3的数据。如何做?
一种方法是:
SELECT t.*
FROM test t
WHERE FIELD(priority, 'high', 'medium', 'low') =
(SELECT MIN(FIELD(priority, 'high', 'medium', 'low'))
FROM test t2
WHERE t2.title = t.title
);
编辑:
我认为不能重复优先事项。以上可以修改为使用id
:
SELECT t.*
FROM test t
WHERE id = (SELECT id
FROM test t2
WHERE t2.title = t.title
ORDER BY FIELD(priority, 'high', 'medium', 'low')
LIMIT 1
);
试试这个...
表格和样本数据
CREATE TABLE test (
id INT(11) UNSIGNED PRIMARY KEY,
title VARCHAR(255) NOT NULL,
priority ENUM('low', 'medium', 'high') NOT NULL
);
INSERT INTO test (id, title, priority) VALUES (1, 'test', 'medium');
INSERT INTO test (id, title, priority) VALUES (2, 'test', 'high');
INSERT INTO test (id, title, priority) VALUES (3, 'test2', 'low');
INSERT INTO test (id, title, priority) VALUES (4, 'test2', 'low');
INSERT INTO test (id, title, priority) VALUES (5, 'test2', 'low');
INSERT INTO test (id, title, priority) VALUES (6, 'test', 'low');
INSERT INTO test (id, title, priority) VALUES (7, 'test3', 'low');
INSERT INTO test (id, title, priority) VALUES (8, 'test3', 'high');
INSERT INTO test (id, title, priority) VALUES (9, 'test3', 'medium');
询问
SELECT Max(t2.id) AS ID,
t1.title AS Title,
t1.priority AS Priority
FROM (SELECT title,
Min(priority) AS priority
FROM test
GROUP BY title
ORDER BY Field(priority, 'high', 'medium', 'low')) t1
INNER JOIN test t2 using (title, priority)
GROUP BY t1.title,
t1.priority;
产量
+-----+--------+----------+
| ID | Title | Priority |
+-----+--------+----------+
| 2 | test | high |
| 5 | test2 | low |
| 8 | test3 | high |
+-----+--------+----------+