Я работаю в MySQL
, и у меня есть эта таблица:
url x y count *
abc.com 1 1 2
abc.com 2 1 2
xyz.com 1 56 5
xyz.com 2 71 5
xyz.com 3 59 5
xyz.com 4 67 5
xyz.com 5 59 5
, и я пытаюсь запустить этот код:
count(dh.x) over(partition by dh.url)
, чтобы получить count of 2 for url of abc.com and a count of 5 for url of xyz.com to be the denominator I divide by in my query below...
эта оконная функция вложена в этот больший CTE:
, stdev_estimates AS (
SELECT dh.url
, CASE SUM(SQUARE(dh.x - xmean)) WHEN 0 THEN 1 ELSE SQRT(SUM(SQUARE(dh.x - xmean)) / (count(dh.x) over(partition by dh.url)) - 1) END AS xstdev
, SQRT(SUM(SQUARE(dh.y - ymean)) / (count(dh.x) over(partition by dh.url)) - 1) AS ystdev
, count(dh.x) over(partition by dh.url) 'denom'
FROM date_hits dh
INNER JOIN mean_estimates m ON m.url = dh.url
GROUP BY dh.url, m.xmean, m.ymean, dh.x, dh.y
)
select *
from stdev_estimates
, но когда я пытаюсь запустить внутренний подвыбор, я получаю эту ошибку:
Сообщение 8120, уровень 16, состояние 1, строка 49 Столбец date_hits.x недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Но это не имеет смысла, потому что я думал, что это обходной путь, требующий группу для dh.x
? Я думал, что вам не нужно группировать по, если вы используете функцию агрегирования.
Суть в том, что мне не нужно группировать по dh.x
, потому что это разбивает мою таблицу на 7 строк, когда я агрегирую все до:
url xstdev ystdev
abc.com .12345 .5679
xyz.com .23455 .79023