想让一个字段的行数作为筛选条件

问题遇到的现象和发生背景

在A表中的payable_amount字段,我希望只要这个字段前10的,也就是在筛选条件里加上只要payable_amount字段前10的条件
不要用LIMIT,因为我其他的字段要全部呢

问题相关代码,请勿粘贴截图
SELECT
  a,b,c,d,e,payable_amount
FROM(
-----------------有问题的部分---------------------
SELECT
  a,b,c,d,e,f,REPLACE(m.money,CONCAT(t.amount,','),'') as payable_amount
FROM
 tblM as m
LEFT JOIN
 tblT as t
ON  t.a= m.a
-----------------有问题的部分---------------------
    ) t
    WHERE t.a IS NOT NULL
)

运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

在“有问题的部分”里面,希望能加上只要payable_amount字段前10的筛选条件

前10是指总共只取10行出来还是说要按哪些字段分组排序,取每个分组的前10?如果有分组的话是按哪几个字段?
如果没有分组,那么是可以用order by 加limit的,当然也可以使用开窗函数,比如把你中间那段替换成下面这样

select * from  (
SELECT
  a,b,c,d,e,f,REPLACE(m.money,CONCAT(t.amount,','),'') as payable_amount,
row_number() over(order by REPLACE(m.money,CONCAT(t.amount,','),'') desc) rn
FROM
 tblM as m
LEFT JOIN
 tblT as t
ON  t.a= m.a) xx where rn<=10

如果是要分组取前10,开窗函数里加上 partition by 分组的字段就好了

直接截断不行吗


SELECT
    a,
    b,
    c,
    d,
    e,
    payable_amount
FROM
    (
        SELECT
            a,
            b,
            c,
            d,
            e,
            f,
            REPLACE (
                m.money,
                CONCAT(t.amount, ','),
                ''
            ) AS payable_amount
        FROM
            tblM AS m
        LEFT JOIN (
            SELECT
                m.a AS a,
                REPLACE (
                    m.money,
                    CONCAT(t.amount, ','),
                    ''
                ) AS payable_amount
            FROM
                tblM AS m
            LEFT JOIN tblT AS t ON t.a = m.a
            ORDER BY
                payable_amount
            LIMIT 10
        ) t1 ON t1.a = m.a
    ) t2
WHERE
    t2.a IS NOT NULL
)

对于payable_amount不是前10的数据,查出来其他字段的同时你希望payable_amount显示什么?空?还是0?