Использование предложения с поиском по номеру - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть следующее заявление sql:

SELECT 
  u.email, 
  sum(completed_on > (now() - interval 7 day)), 
  sum(completed_on > (now() - interval 30 day)),
  count(*)
FROM mturk_flush f JOIN auth_user u ON f.completed_by_id=u.id
WHERE completed_by_id IS NOT NULL
GROUP BY completed_by_id
HAVING 3 != 0
ORDER BY 3 DESC

Обратите внимание, что следующее работает :

HAVING sum(completed_on > (now() - interval 30 day)) != 0

Есть ли способ использовать псевдоним или индекс для ссылки на него?

1 Ответ

0 голосов
/ 05 ноября 2018

В отличие от Order By, Having не работает с номерами столбцов. От Документы :

[HAVING where_condition]
[ORDER BY {col_name | expr | position}

Теперь я бы порекомендовал вам никогда не использовать номера столбцов, даже с Order By. Он подвержен ошибкам и снижает ясность кода и читаемость для будущих сопровождающих.

Вместо этого вы можете определить псевдонимы, а использовать их в предложениях Group By, Order By и Having.

SELECT 
  u.email, 
  sum(completed_on > (now() - interval 7 day)) AS sum_7day_diff, 
  sum(completed_on > (now() - interval 30 day)) AS sum_30day_diff,
  count(*)
FROM mturk_flush f JOIN auth_user u ON f.completed_by_id=u.id
WHERE completed_by_id IS NOT NULL
GROUP BY completed_by_id
HAVING sum_30day_diff != 0
ORDER BY sum_30day_diff DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...