对于看起来像这样的数据库表:
id | year | stint | sv
----+------+-------+---
mk1 | 2001 | 1 | 30
mk1 | 2001 | 2 | 20
ml0 | 1999 | 1 | 43
ml0 | 2000 | 1 | 44
hj2 | 1993 | 1 | 70
我想得到以下输出:
count
-------
3
以条件为基础,计算大于1994年的单年sv> 40的id的数量。如果同一年的停留时间超过一个,则添加sv点并查看> 40。
这是我到目前为止写的,但是显然是不对的:
SELECT COUNT(DISTINCT id),
SUM(sv) as SV
FROM public.pitching
WHERE (year > 1994 AND sv >40);
我知道语法是完全错误的,并且缺少某些条件的信息,但是我对SQL不够熟悉,并且不知道如何正确地对具有条件的同一表中的两行进行求和(也许有一个子查询?)。任何帮助,将不胜感激! (使用postgres)
答案 0 :(得分:1)
您可以使用嵌套查询来获取聚合,然后将其包装以获取计数。请注意,总和的条件必须在having
子句中:
SELECT COUNT(id)
FROM (
SELECT id,
year,
SUM(sv) as SV
FROM public.pitching
WHERE year > 1994
GROUP BY id,
year
HAVING SUM(sv) > 40 ) years
如果id
仅在满足条件的一年内应该只计数一次,那么请使用COUNT(distinct id)
而不是COUNT(id)
答案 1 :(得分:1)
您可以尝试像使用sum
和partition by year
一样。
select count( distinct year) from
(
select year, sum(sv) over (partition by year) s
from public.pitching
where year > 1994
) t where s>40