SQL Нахождение суммы строк и возвращение количества ключей - PullRequest
0 голосов
/ 03 марта 2019

Для таблицы базы данных, которая выглядит примерно так:

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

с условиями, подсчитывающими количество идентификаторов, которые имеютsv> 40 для одного года больше, чем 1994. Если в одном и том же году более одного периода, добавьте sv points и посмотрите, если> 40.

Это то, что я написал до сих пор, но этоочевидно, не прав:

SELECT COUNT(DISTINCT id),
SUM(sv) as SV
FROM public.pitching
WHERE (year > 1994 AND sv >40);

Я знаю, что синтаксис совершенно неправильный, а некоторые сведения об условиях отсутствуют, но я недостаточно знаком с SQL и не знаю, как правильно выполнить суммированиедве строки в одной таблице с условием (может быть, с подзапросом?).Любая помощь будет оценена!(используя postgres)

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы можете попробовать выполнить следующие действия, используя 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

Онлайн-демонстрация

0 голосов
/ 03 марта 2019

Вы можете использовать вложенный запрос, чтобы получить агрегаты, и обернуть его для получения количества.Обратите внимание, что условие для суммы должно быть в предложении 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...