+----+------------+------+
| 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 |
+----+------------+------+
我想要的......等等:)
答案 0 :(得分:2)
自SQLite 3.7.11起,您可以使用MAX
或MIN
选择返回组中的哪条记录。
像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