В SQL, как получить два разных строковых значения для выполнения агрегатной функции?

#mysql #sql

#mysql #sql

Вопрос:

Напишите запрос, чтобы получить показатель посещаемости для каждого приложения в 2019 году. Схема таблицы событий — app_id (целое число), event_id (строка: «показ», «щелчок» и отметка времени (datetime). Мой запрос приведен ниже, но я не уверен, как фильтровать по показу или щелчку, чтобы рассчитать показатель посещаемости.

 SELECT app_id, COUNT(event_id = ‘click’ ) / COUNT (event_id = ‘impression’) as click_through_rate
FROM events 
WHERE  EXTRACT(YEAR from timestamp) = 2019
GROUP BY app_id
ORDER BY click_through_rate DESC
  

Ответ №1:

Я думаю, вы хотите sum() :

 SELECT app_id, 
       SUM(event_id = ‘click’ ) / SUM(event_id = ‘impression’) as click_through_rate
FROM events 
WHERE  EXTRACT(YEAR from timestamp) = 2019
GROUP BY app_id
ORDER BY click_through_rate DESC;
  

COUNT() подсчитывает количество значений, не являющихся NULL значениями для выражения. Вам нужна сумма, где выражение true — следовательно SUM() , вместо COUNT() .

Комментарии:

1. ok имеет смысл, но является ли это правильным синтаксисом для получения значений click и impression?

2. @EmilyKuo . , , Это должно подсчитать строки с этими значениями в MySQL.