在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?