[英]Can't figure out how to write this query
我的桌子上有几百条记录,我需要获取其中的最后50条记录,但我需要25位男性和25位女性。 有一个性别列。 我只是不知道如何进行查询。 我可以帮忙吗?
如果您恰好需要50个,请使用UNION
来获取每个的最后25个。 假设您有一些自动递增的id
列,该列以降序排序以检索每个性别的最新25个字符。
为了对UNION
各个组件使用ORDER BY
和LIMIT
,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.