簡體   English   中英

MySQL-根據其他字段僅選擇一次值

[英]MySQL - Select value only once based on another field

我的數據庫架構如下所示:

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');

我想根據priority字段對字段title進行DISTINCT 例如,如果有兩個或兩個以上具有相同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     |
+-----+--------+----------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM