Извините за глупый вопрос. Я читал много тем об одной и той же проблеме, но все же не могу это исправить ...

SELECT   company_name, SUM(clicks)
FROM     table1
WHERE    code = 'ES'
GROUP BY 1
ORDER BY clicks DESC
LIMIT 100;

Это приводит к:

Выражение «клики» отсутствует в списке GROUP BY

И если я попробую это:

SELECT   company_name, SUM(clicks)
FROM     table1
WHERE    code = 'ES'
GROUP BY 1,2
ORDER BY clicks DESC
LIMIT 100;

Вот что я получаю:

Невозможно сгруппировать по совокупности.

Если я попытаюсь без агрегации на «клики»:

SELECT   company_name, clicks
FROM     table1
WHERE    code = 'ES'
GROUP BY 1
ORDER BY clicks DESC
LIMIT 100;

Ошибка: выражение «клики» отсутствует в списке GROUP BY

А если добавить клики в группу:

SELECT   company_name, clicks
FROM     table1
WHERE    code = 'ES'
GROUP BY 1,2
ORDER BY clicks DESC
LIMIT 100;

Результаты не то, что мне нужно:

Company_name | clicks
-------------+--------
    company1 | 250   
    company1 | 340
    company2 | 100 
    company2 | 300
    company2 | 344

Как я могу получить?:

Company_name | clicks
-------------+-------
    company1 | 590
    company2 | 744

Спасибо!

1
Marce Castro 28 Май 2017 в 12:42

2 ответа

Лучший ответ

Вы должны сделать это

SELECT company_name, SUM(clicks) as clicks
FROM table1   
WHERE code = 'ES'  
GROUP BY company_name 
ORDER BY clicks DESC 
LIMIT 100;

Ваш первый запрос правильный, не уверен, почему вы получаете ошибку. Однако ваш второй запрос неверен, так как вы не можете сгруппировать по второму столбцу, который вы получили путем агрегации.

Использование чисел в предложении group by, хотя и выглядит neater, на самом деле добавляет путаницы. Поэтому постарайтесь полностью их опустить. Используйте правильные псевдонимы столбцов и используйте их в group by и order by, чтобы избежать путаницы.

1
Utsav 28 Май 2017 в 09:54

Попробуй это

SELECT company_name, SUM(clicks)

FROM table1

WHERE code = 'ES'

GROUP BY company_name

ORDER BY 2 DESC;
0
ragav 28 Май 2017 в 09:48