Mysql 按优先级选择
表结构: 注册:Mysql 按优先级选择,mysql,sql,Mysql,Sql,表结构: 注册: uuid | name | total 费率: uuid | type | rate 注册率: registration | rate 初步要求是: select * from registration r join registration_rate rr on rr.registration = r.uuid join rate rt on rt.uuid = rr.rate group by r.name, rt.type 我的双表注册的SQL结果和速率为:
uuid | name | total
费率:
uuid | type | rate
注册率:
registration | rate
初步要求是:
select * from registration r
join registration_rate rr on rr.registration = r.uuid
join rate rt on rt.uuid = rr.rate
group by r.name, rt.type
我的双表注册的SQL结果和速率为:
uuid | name | rate | type
1 | AAA | 15 | U
2 | BBB | 20 | U
3 | CCC | 300 | F
4 | AAA | 250 | F
我想有这样的东西,如果一个利率的类型'F'存在,然后显示
uuid | name | rate | type
2 | BBB | 20 | U
3 | CCC | 300 | F
4 | AAA | 250 | F
谢谢
编辑:
我尝试了另一种有效的解决方案
select uuid, name, rate, (case rt.type when 2 then 2 else 1 end ) as type
from registration r
join registration_rate rr on rr.registration = r.uuid
join rate rt on rt.uuid = rr.rate
group by r.name, rt.type
如果是F行,返回它。或者,使用“不存在”验证同名的其他行中是否没有F
select t1.*
from tablename t1
where type = 'F'
or not exists (select * from tablename t2
where t2.name = t1.name
and t2.type = 'F')
替代解决方案:
select t1.*
from tablename t1
join (select name, min(type) type
from tablename
group by name) t2
ON t1.name = t2.name and t1.type = t2.type
试试这个,我建议你的主旨
SELECT t.uuid,
t.name,
IFNULL(MAX(t.F_type), MAX(t.not_F_type)) AS "type",
IFNULL(MAX(t.F_rate), MAX(t.not_F_rate)) AS "rate"
FROM
(
SELECT r.uuid,
r.name,
CASE rt.type WHEN 'F' THEN rt.type END AS F_type,
CASE WHEN rt.type <> 'F' THEN rt.type END AS not_F_type,
CASE rt.type WHEN 'F' THEN rt.rate END AS F_rate,
CASE WHEN rt.type <> 'F' THEN rt.rate END AS not_F_rate
FROM registration AS r
JOIN registration_rate AS rr ON rr.registration = r.uuid
JOIN rate AS rt ON rt.uuid = rr.rate
) as t
GROUP BY t.uuid, t.name;
因此,您需要根据您的规则拆分适当的列rate,type如果rate的类型“F”存在,则使用case语句将其显示为两个新的独立列,而不是其他列:第一列包含F type的值,第二列包含其他类型的值。我为类型和比率列做了这项工作。然后,我使用GROUPBY、聚合函数和IFNULL语句将这些列和记录粘在一起。您可以在这里使用其他语句:case、IF等
据我所知,这是您所需要的。而您的表模式是?您当前的查询是?你能详细说明一下吗?你问的问题很模糊,我已经编辑了我的帖子。如何基于rate的类型值执行条件请求?您仍然没有提供表结构。哪个表属于结果的id列?分组时尝试获取的聚合函数是什么?表结构与查询不匹配:注册表没有uuid,但根据查询,它应该是:rr.registration=r.uuid;注册率表也没有列注册。试着玩这把提琴,等它准备好了再给我们提琴。您应该实现插入数据