Sqlite GROUP BY优先级

时间:2013-09-22 12:45:23

标签: sql sqlite group-by

+----+------------+------+
| 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   |
+----+------------+------+

我想要的......等等:)

1 个答案:

答案 0 :(得分:2)

自SQLite 3.7.11起,您可以使用MAXMIN选择返回组中的哪条记录。 像lang = 'en'这样的布尔表达式返回0或1:

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

如果您希望获得多种语言的优先级,可以使用CASE expression

SELECT *,
       MAX(CASE lang
           WHEN 'en' THEN 2
           WHEN 'fr' THEN 1
                     ELSE 0
           END)
FROM MyTable
GROUP BY id