gpt4 book ai didi

MySQL 基于优先级值的行

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

假设我有一个包含四列的表:名字、姓氏、数字(不是主键)和状态。如果有一个人具有相同的名字、姓氏和号码,但状态不同(其中状态是字符串,例如“King”或“Queen”或“Jack”)。

我想从表中检索所有列的所有值,但如果存在重复项,其中有相同名字、姓氏和号码的值,我想获取那些状态为“King”的值,如果存在没有“King”状态的重复项,则获取具有“Queen”状态的重复项,如果没有具有“King”或“Queen”状态的重复项,则仅获取具有“Jack”状态的重复项之一。

基本上,优先顺序是国王、王后,然后是 jack 。因此,我想要表中的所有值,但如果有重复项,则仅包含具有最高优先级的值。我做了一些研究,似乎除 MYSql 之外的 SQL 实现都提供了诸如 denense_rank 之类的函数,但我需要在 MYSql 中实现它,但我找不到任何方法。

最佳答案

尝试使用 session 变量:

SET @row_number:=1;

SELECT
FirstName,
LastName,
Number,
Status
FROM(
SELECT
@row_number:=
CASE
WHEN @FirstName = FirstName AND @LastName = LastName AND @Number = Number
THEN @row_number + 1
ELSE 1
END AS num,
@FirstName := FirstName as FirstName,
@LastName := LastName as LastName,
@Number := Number as Number,
Status
FROM
t1
ORDER BY
FirstName,
lastName,
Number,
CASE
WHEN STATUS = 'King' THEN '1'
WHEN STATUS = 'Queen' THEN '2'
WHEN STATUS = 'Jack' THEN '3'
END
) as ttt
WHERE num = 1;

关于MySQL 基于优先级值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49969412/

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