1
+----+------------+------+
| id |   title    | lang |
+----+------------+------+
|  1 | title 1 EN | en   |
|  1 | title 1 FR | fr   |
|  1 | title 1 ZH | zh   |
|  2 | title 2 EN | en   |
|  3 | title 3 ZH | zh   |
+----+------------+------+

这是我的表,我想按 id 分组,但有时我需要语言“en”优先,有时我需要语言“zh”优先

SELECT * FROM table GROUP BY id

给了我所有 uniqe id 的列表,但将 zh 置于 id 1 的位置,我是否可以为语言添加优先级?

我想要的“en”输出:

+----+------------+------+
| id |   title    | lang |
+----+------------+------+
|  1 | title 1 EN | en   |
|  2 | title 2 EN | en   |
|  3 | title 3 ZH | zh   |
+----+------------+------+

我想要的“fr”输出:

+----+------------+------+
| id |   title    | lang |
+----+------------+------+
|  1 | title 1 FR | fr   |
|  2 | title 2 EN | en   |
|  3 | title 3 ZH | zh   |
+----+------------+------+

我想要的..一直在:)

4

1 回答 1

3

从 SQLite 3.7.11 开始,您可以使用MAX或选择返回组中的哪条记录MIN。类似的布尔表达式lang = 'en'返回 0 或 1:

SELECT *,
       MAX(lang = 'en')
FROM MyTable
GROUP BY id

如果您想为一种以上的语言设置优先级,可以使用CASE 表达式

SELECT *,
       MAX(CASE lang
           WHEN 'en' THEN 2
           WHEN 'fr' THEN 1
                     ELSE 0
           END)
FROM MyTable
GROUP BY id
于 2013-09-22T14:30:05.927 回答