MySQL按选择行分组

时间:2018-10-10 06:36:40

标签: mysql group-by

我有下表:

+------+---------+--------+
| lang | title   | url    |
+------+---------+--------+
| pt   | Livro 1 | o294jl |
| en   | Book 1  | o294jl |
| en   | Book 2  | 7s621f |
+------+---------+--------+

当特定语言是系统语言时,我需要确定lang的优先级。例如,假设我正在使用pt语言,我需要一个返回以下内容的查询:

+------+---------+--------+
| lang | title   | url    |
+------+---------+--------+
| pt   | Livro 1 | o294jl |
| en   | Book 2  | 7s621f |
+------+---------+--------+

基本上,当使用title时,我需要为langGROUP BY url等设置确定性值。当前,它基本上得到最低的id作为值:

SELECT lang, title, url
FROM book
GROUP BY book.url

我尝试将ORDER BYCASE子句一起使用,但是由于它在GROUP BY操作之后运行,因此无法正常工作。我可以将GROUP_CONCATIF一起使用来选择正确的值,但是由于我的真实表有几列,所以看起来不太好。

谢谢。

1 个答案:

答案 0 :(得分:-1)

对于您来说,如果您知道整个应用程序中只有两种类型的lang,它们就是“ pt”和“ en”。您可以使用order by lang desc简单地扩展查询。

这里是样品

SELECT b.lang, b.title, b.url
FROM book b
GROUP BY b.lang,b.title,b.url
ORDER BY b.lang DESC

但是,如果将来您可能会使用更多类型的lang,并可能需要按特定的lang进行订购。我建议您再添加一个表来保存lang的优先级值。因此,您可以按优先级排序以获取应该首先出现的lang。

这里是样品

SELECT b.lang, b.title, b.url
FROM book b 
INNER JOIN priority p ON p.lang = b.lang
ORDER BY p.order