MYSQL подсчитывает строки при двух разных условиях и возвращает значение в качестве вывода, если количество равно - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть таблица:

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

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

0 голосов
/ 07 апреля 2019

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