【发布时间】:2015-03-18 17:12:18
【问题描述】:
我的mysql查询结果如下:
+----+------------+-------------+
| id | title | lang |
+----+------------+--------------
| 1 | ola1 | 1 |
| 1 | hello1 | 2 |
| 1 | bonjour1 | 3 |
| 2 | ola2 | 1 |
| 2 | bonjour2 | 3 |
| 3 | hello3 | 2 |
| 4 | bonjour4 | 3 |
+----+------------+-------------+
我想要的是按 id 进行 group_by 查询,它为每个 id 提供标题以及 lang 字段的优先顺序。示例:
语言偏好顺序 1、2、3 的结果:
+----+------------+-------------+
| id | title | lang |
+----+------------+--------------
| 1 | ola1 | 1 |
| 2 | ola2 | 1 |
| 3 | hello3 | 2 |
| 4 | bonjour4 | 3 |
+----+------------+-------------+
语言偏好顺序 3、2、1 的结果:
+----+------------+-------------+
| id | title | lang |
+----+------------+--------------
| 1 | bonjour1 | 3 |
| 2 | bonjour2 | 3 |
| 3 | hello3 | 2 |
| 4 | bonjour4 | 3 |
+----+------------+-------------+
谢谢!
【问题讨论】:
-
请澄清您的问题。为什么在您的第二个结果集示例中 lang 值乱序(3,3,2,3):什么逻辑生成了该顺序?
ORDER BY lang ASC或...DESC会为你做,还是我错过了什么?为什么GROUP BY? -
嗨奥利!感谢您的回答。我说 group by 是因为我希望每个 id 有一行,这是通过 group by 关键字完成的。但是我希望能够根据 lang 字段选择将选择哪一行。因此,假设我偏好语言 1,然后是 2,然后是 3。我想为每个 id 返回具有 lang=1 的行,如果存在具有该语言的行,如果没有选择 lang=2,依此类推。 ..
标签: mysql database select group-by having