我需要优化这个sql select:
SELECT ch_num, payment_type, Total FROM transactions WHERE ( ch_num )
IN (
SELECT ch_num FROM transactions GROUP BY ch_num HAVING count('ch_num') > 1
)
ORDER BY `ch_num`
我得到的结果是:
ch_num payment_type Total
20001 visa 36.60
20001 visa 36.60
20001 mc 30.60
50019 cash 9.00
50019 mc 18.95
50023 cash 2.70
50023 visa 7.00
但是我只需要有'现金'payment_type的结果行,所以'ch_no'20001应该省略。 那么正确的结果就是:
ch_num payment_type Total
50019 cash 9.00
50019 mc 18.95
50023 cash 2.70
50023 visa 7.00
答案 0 :(得分:1)
SELECT ch_num, payment_type, Total
FROM transactions
WHERE ch_num IN
(
SELECT ch_num
FROM transactions
GROUP BY ch_no
HAVING count('ch_num') > 1
and sum(payment_type='cash') >= 1
)
ORDER BY `ch_num`
答案 1 :(得分:0)
这是一个完整的,经过验证的代码示例,最后会有测试结果。我使用的是Oracle,但SQL SELECT的语法应该相同。
create table transactions (ch_num int, payment_type varchar2(100), total float);
insert into transactions values(20001,'visa',36.60);
insert into transactions values(20001,'mc',30.60);
insert into transactions values(50019,'cash',9.00);
insert into transactions values(50019,'mc',18.95);
insert into transactions values(50023,'cash',2.70);
insert into transactions values(50023,'visa',7.00);
SELECT ch_num, payment_type, Total FROM transactions a WHERE ( ch_num )
IN (
SELECT ch_num FROM transactions GROUP BY ch_num HAVING count(ch_num) > 1
)
AND EXISTS
(SELECT ch_num FROM transactions b where payment_type = 'cash' and a.ch_num = b.ch_num)
ORDER BY ch_num
结果:
CH_NUM PAYMENT_TYPE TOTAL
1 50019 cash 9
2 50019 mc 18.95
3 50023 cash 2.7
4 50023 visa 7