无法弄清楚如何编写此查询

时间:2012-04-02 14:50:57

标签: mysql

我在桌子上有几百条记录,我需要得到最后50条记录,但我需要25个男性和25个女性。有一个性别列。我只是无法弄清楚如何进行查询。我可以得到一些帮助吗?

5 个答案:

答案 0 :(得分:6)

如果您需要50个,请使用UNION,其中每个获得最后25个。这假设您有一些自动递增的id列,该列按降序排序,以检索每个性别的最新25个。

为了对ORDER BY的各个组件使用LIMITUNION,MySQL希望这些组件包含在()中。

(SELECT * FROM tbl WHERE gender='F' ORDER BY id DESC LIMIT 25)
UNION ALL
(SELECT * FROM tbl WHERE gender='M' ORDER BY id DESC LIMIT 25)

注意:顺便说一下,我在这里使用SELECT *是为了简洁,但您应该从不UNION查询中实际执行此操作。相反,明确列出您需要的列,并确保它们在UNION的两个部分中的顺序相同。

像:

(SELECT col1, col2, coln FROM tbl WHERE gender='F'....)
UNION ALL
(SELECT col1, col2, coln FROM tbl WHERE gender='M'....)

答案 1 :(得分:5)

(SELECT * FROM table WHERE gender = 'M' ORDER BY id DESC LIMIT 25)
UNION
(SELECT * FROM table WHERE gender = 'F' ORDER BY id DESC LIMIT 25)

我想这会奏效。对于ID部分的订单,我假设您有一个自动增量ID列,使最后添加记录具有最高ID的记录。

答案 2 :(得分:2)

我很快就想到了这一点,没有保证。

SELECT * FROM table WHERE gender = 'male' ORDER BY ID DESC LIMIT 25
UNION ALL
SELECT * FROM table WHERE gender = 'female' ORDER BY ID DESC LIMIT 25

基本上,它得到了最后25名男性,最后25名女性,并将结果结合在一起。

答案 3 :(得分:1)

除非您有另一列可用于ORDER BY,否则没有最后一个概念。

我建议写2个查询,仅针对男性,而另一个仅针对女性。

然后使用订单,因此有一个'last'设置。

然后翻转它(使用DESC),这样它们就是第一个。

然后使用LIMIT子句选择所需的数字。

最后,UNION他们在一起。

答案 4 :(得分:1)

尝试使用两个查询,一个用于获取25个最新男性,另一个用于获取25个最新女性。然后只是连接结果。

SELECT * FROM males LIMIT 25 ORDER BY DESC

SELECT * FROM females LIMIT 25 ORDER BY DESC