gpt4 book ai didi

MySQL:首先对每个出现的情况进行排序,然后对剩余的进行排序

转载 作者:行者123 更新时间:2023-11-29 13:21:41 25 4
gpt4 key购买 nike

如何确保 idtag 列第一次出现时不重复?

示例:前 4 个(IN 子句中值的大小)idtag 出现次数不能为 85,85,85,90

数据库架构:http://sqlfiddle.com/#!2/0a683/2

我不使用 group by,因为有时我需要限制 IN 子句中超过 id 的数量。例如,如果我使用:

SELECT
tr.idreceita,
tr.idtag
FROM tagreceita tr
WHERE tr.idtag IN (85,88,90)
GROUP BY tr.idtag
LIMIT 4

如果结果是 4 行仅包含 tr.idtag IN (85,88,90) 中允许的值,那就太理想了

谢谢!

最佳答案

正确的方法是使用聚合:

SELECT min(tr.idreceita), tr.idtag
FROM tagreceita tr
WHERE tr.idtag IN (85,88,90)
group by tr.idtag;

编辑:

我明白了,有时您想要 in 列表中的更多内容。在这种情况下,最简单的方法可能是随机化结果:

select tr.idreceita, tr.idtag
from tagreceita tr
where tr.idtag IN (85,88,90)
order by rand();

这并不能保证唯一性,但它是一个简单的解决方案。

编辑二:

获得平衡结果的正式解决方案使用变量(或几乎任何其他数据库中的 row_number()):

select idreceita, idtag
from (select tr.idreceita, tr.idtag,
@rn := if(@idtag = tr.idtag, @rn + 1, 1) as rn,
@idtag := tr.idtag
from tagreceita tr cross join
(select @rn := 0, @idtag := -1) const
where tr.idtag IN (85, 88, 90)
order by tr.idtag
) t
order by rn, idtag
order by rand();

关于MySQL:首先对每个出现的情况进行排序,然后对剩余的进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20746606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com