MYSQL подсчитывает строки при двух разных условиях и возвращает значение в качестве выходных данных, если значения равны

#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;