У меня есть следующие данные:
+--------------------+-------------+------------------+
| timestamp | profit_loss | profit_loss_type |
+--------------------+-------------+------------------+
| lm58-1527906222477 | 0.00200000 | profit |
| lm58-1527906222477 | -0.00008617 | fraction |
| lm58-1527906222477 | -0.00027400 | normal |
| lm58-1527906222477 | 0.00008617 | nett |
| lm58-1527906222477 | 0.00027400 | nett |
| lm99-1527906222888 | 0.00200000 | profit |
| lm99-1527906222888 | -0.00008617 | fraction |
| lm99-1527906222888 | -0.00027400 | normal |
| lm11-1527906222999 | 0.00200000 | profit |
| lm11-1527906222999 | 0.00008617 | fraction |
| lm11-1527906222999 | 0.00027400 | normal |
+--------------------+-------------+------------------+
и я хочу получить profit_loss < 0
timestamp
WITH profit_loss < 0
но БЕЗ profit_loss_type = 'nett'
поэтому я ожидаю результата следующим образом:
+--------------------+
| timestamp |
+--------------------+
| lm99-1527906222888 |
+--------------------+
здесь мой запрос, чтобы получить всю timestamp
которая содержит profit_loss < 0
:
SELECT timestamp
FROM gross_profit
WHERE profit_loss < 0
AND (profit_loss_type = 'normal' OR profit_loss_type = 'fraction')
GROUP BY timestamp
13367 rows in set (0.15 sec)
но когда я добавляю HAVING
, почему результат отличается?
SELECT timestamp
FROM gross_profit
GROUP BY timestamp
HAVING SUM(CASE WHEN profit_loss_type = 'nett' THEN 1 ELSE 0 END) = 0
AND SUM(CASE WHEN profit_loss < 0 THEN 1 ELSE 0 END) = 1;
10741 rows in set (0.23 sec)
в то время как при этой симуляции у меня есть только 1 временная метка, которая содержит profit_loss_type = nett
, поэтому результат должен быть 13366. не 10741.
Изменить на SUM> 0
SELECT timestamp
FROM gross_profit
GROUP BY timestamp
HAVING SUM(CASE WHEN profit_loss_type = 'nett' THEN 1 ELSE 0 END) = 0
AND SUM(CASE WHEN profit_loss < 0 THEN 1 ELSE 0 END) > 0;
profit_loss_type = nett
, и с данными данными невозможно получить около 10 тыс. Строк результатов.profit_loss
timestamp
с минусомprofit_loss
но не содержитprofit_loss_type = nett