问题
Sorry for the silly question. I have read a lot of threads about the same issue, but still, can't fix this...
SELECT company_name, SUM(clicks)
FROM table1
WHERE code = 'ES'
GROUP BY 1
ORDER BY clicks DESC
LIMIT 100;
This results in:
Expression 'clicks' is not present in the GROUP BY list
And if I try this:
SELECT company_name, SUM(clicks)
FROM table1
WHERE code = 'ES'
GROUP BY 1,2
ORDER BY clicks DESC
LIMIT 100;
This is what I get:
Cannot group by an aggregate.
If I try with no aggregation on "clicks":
SELECT company_name, clicks
FROM table1
WHERE code = 'ES'
GROUP BY 1
ORDER BY clicks DESC
LIMIT 100;
Error: Expression 'clicks' is not present in the GROUP BY list
And if add clicks to the group by:
SELECT company_name, clicks
FROM table1
WHERE code = 'ES'
GROUP BY 1,2
ORDER BY clicks DESC
LIMIT 100;
The results are not what I need:
Company_name | clicks
-------------+--------
company1 | 250
company1 | 340
company2 | 100
company2 | 300
company2 | 344
How can I get?:
Company_name | clicks
-------------+-------
company1 | 590
company2 | 744
Thank you!
回答1:
You should do this
SELECT company_name, SUM(clicks) as clicks
FROM table1
WHERE code = 'ES'
GROUP BY company_name
ORDER BY clicks DESC
LIMIT 100;
Your first query is correct, not sure why are you getting the error. Your second query is however incorrect as you cannot group by second column, which you have derived by aggregation.
Using numbers in group by
clause, while looks neater
, it actually adds to the confusion. Hence try to omit them completely. Use proper column alises and use them in group by
and order by
to avoid confusion.
回答2:
try this
SELECT company_name, SUM(clicks)
FROM table1
WHERE code = 'ES'
GROUP BY company_name
ORDER BY 2 DESC;
来源:https://stackoverflow.com/questions/44225875/cant-fix-this-cannot-group-by-an-aggregate