#mysql #count #equality
#mysql #подсчет #равенство
Вопрос:
У меня есть таблица:
PRICE
ticker date close
AAPL 3/20/2019 $100
AAPL 3/21/2019 $101.5
AAPL 3/22/2019 $106.5
GOOG 3/20/2019 $100
GOOG 3/21/2019 $130
GOOG 3/22/2019 $110
MSFT 3/20/2019 $184.5
MSFT 3/21/2019 $188.5
MSFT 3/22/2019 $210
IBM 3/20/2019 $72
IBM 3/21/2019 $70
IBM 3/22/2019 $10
И я хочу знать правильный способ сравнить количество строк при двух разных условиях и вернуть тикер, если их количество равно. (В конечном счете, я хочу возвращать тикеры, только если close>100 за весь март). Итак:
SELECT ticker, COUNT(*) FROM PRICE WHERE close>100 group by ticker;
ВОЗВРАТ:
| ticker | COUNT(*) |
-------- ----------
| AAPL | 2 |
| GOOG | 2 |
| MSFT | 3 |
И
SELECT ticker, COUNT(*) FROM PRICE group by ticker;
ВОЗВРАТ:
| ticker | COUNT(*) |
-------- ----------
| AAPL | 3 |
| GOOG | 3 |
| MSFT | 3 |
Таким образом, MSFT должен быть единственным тикером, который возвращается на вывод.
Новичок в SQL и любые предложения будут оценены!
Ответ №1:
Один простой подход агрегирует по символу бегущей строки и утверждает, что все закрывающие значения больше 100:
SELECT ticker -- maybe include COUNT(*), if you want to see the counts
FROM price
GROUP BY ticker
HAVING COUNT(CASE WHEN close <= 100 THEN 1 END) = 0;