SQL:如何找到所有记录在列中具有相同值的值的总和?

时间:2015-08-26 12:16:45

标签: sql select where

我的付款表包含多个列,包括学生 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。

4 个答案:

答案 0 :(得分:2)

SQL Fiddle

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