我的付款表包含多个列,包括学生 值和 Payment_type。 我想创建一个计算值总和的查询,如果同一个学生的所有记录只有付款类型。 如果学生至少有一种不同于NULL的支付类型,则不应包括该学生。
示例:
Student Payment Value Payment_type
1 1 100 NULL
1 2 200 NULL
2 1 200 NULL
3 1 150 Cash
2 2 100 Cash
3 2 200 NULL
1 3 200 NULL
如果您查看示例,它应该给我结果500,因为学生1的值的总和是500,并且他/她的所有支付类型都是NULL。
答案 0 :(得分:2)
MySQL 5.6架构设置:
CREATE TABLE Payments
(`Student` int, `Payment` int, `Value` int, `Payment_type` varchar(4))
;
INSERT INTO Payments
(`Student`, `Payment`, `Value`, `Payment_type`)
VALUES
(1, 1, 100, NULL),
(1, 2, 200, NULL),
(2, 1, 200, NULL),
(3, 1, 150, 'Cash'),
(2, 2, 100, 'Cash'),
(3, 2, 200, NULL),
(1, 3, 200, NULL)
;
查询1 :
select student, sum(value)
from payments
group by student
having max(Payment_type) IS NULL
<强> Results 强>:
| Student | sum(value) |
|---------|------------|
| 1 | 500 |
答案 1 :(得分:1)
select student, sum(value)
from payments
group by student
having sum(case when Payment_type is not null then 1 else 0 end) = 0
答案 2 :(得分:0)
这应该有效:
newtbl
答案 3 :(得分:0)
对我来说,这是非常干净的,加上语义准确的描述:
SELECT student, SUM(value)
FROM payments p1
WHERE NOT EXISTS (SELECT 1
FROM payments p2
WHERE p2.student = p1.student
AND Payment_type IS NOT NULL)
GROUP BY student