繁体   English   中英

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

[英]Can't figure out how to write this query

我的桌子上有几百条记录,我需要获取其中的最后50条记录,但我需要25位男性和25位女性。 有一个性别列。 我只是不知道如何进行查询。 我可以帮忙吗?

如果您恰好需要50个,请使用UNION来获取每个的最后25个。 假设您有一些自动递增的id列,该列以降序排序以检索每个性别的最新25个字符。

为了对UNION各个组件使用ORDER BYLIMIT ,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'....)
(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最高的列。

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

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位女性,并将结果合并在一起。

除非您还有可以用于ORDER BY列,否则没有LAST的概念。

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

然后使用order by,这样就设置了“最后一个”。

然后翻转(使用DESC ),使其成为FIRST。

然后使用LIMIT子句选择所需的号码。

然后最后, UNION在一起。

尝试使用两个查询,一个查询获取25个最新的男性,另一个查询获取25个最新的女性。 然后将结果串联起来。

SELECT * FROM males LIMIT 25 ORDER BY DESC

SELECT * FROM females LIMIT 25 ORDER BY DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM