SQL: имея условную сумму - PullRequest
       19

SQL: имея условную сумму

0 голосов
/ 29 августа 2018

Я создал запрос для сравнения статистики продаж компании с другими компаниями.

Упрощенно, это как:

SELECT SUM(CASE WHEN company=foobar THEN sales ELSE 0) as sales_foobar,
SUM(sales) as sales_total, country, year, product FROM sales_table
GROUP BY country, year, product HAVING (the above sum again) > 0

Правило соответствия требует, чтобы в тех случаях, когда у компании были какие-либо продажи, могут отображаться только строки, и хотя мой код будет отбрасывать строки, в которых у foobar не было продаж, он также будет отбрасывать их, если продажи равны 0, поскольку заказы и возвраты равны.

Теперь, как я могу получить только те строки, в которых у компании были данные о продажах?

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Вы можете подсчитать количество строк, соответствующих компании, в предложении HAVING:

SELECT SUM(CASE WHEN company = foobar THEN sales ELSE 0 END) as sales_foobar,
       SUM(sales) as sales_total, country, year, product
FROM sales_table
GROUP BY country, year, product
HAVING SUM( company = foobar ) > 0;  -- there is at least one record for the company
0 голосов
/ 29 августа 2018

Только что сработал по вашему вопросу, предполагая, что company = 'foobar; Вы почти сделали ответ только в своем коде. Поэтому, если вам требуются какие-либо другие конкретные критерии, кроме этого, пожалуйста, дайте мне знать. Я бы отредактировал ответ.

SELECT 
    SUM (CASE WHEN company='foobar' THEN sales ELSE 0 end) as sales_foobar,
    SUM(sales) as sales_total, 
    country, 
    year, 
    product 
        FROM sales_table
            GROUP BY country, year, product 
                HAVING SUM (CASE WHEN company='foobar' THEN sales ELSE 0 end) > 0

enter image description here

0 голосов
/ 29 августа 2018

Вы должны использовать Где:

   SELECT SUM(CASE WHEN company=foobar THEN sales ELSE 0) as sales_foobar,
    SUM(sales) as sales_total, country, year, product 
    FROM sales_table
    Where sales > 0
    GROUP BY country, year, product HAVING (the above sum again) > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...