Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按优先级选择_Mysql_Sql - Fatal编程技术网

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;注册率表也没有列注册。试着玩这把提琴,等它准备好了再给我们提琴。您应该实现插入数据