MySQL由count(1)组而来

问题描述 投票:1回答:1

我是现在的工作品牌和新品,我看到以下SQL句子。

SELECT t.name store,p.id, p.name,count(1)
FROM regular_shippings sh
JOIN
   products p ON matching columns.
ANOTHER JOINS
WHERE criteria
AND anotherCriteria
GROUP BY p.id
HAVING count(1) > 0
ORDER BY t.name,count(1) desc;

我的第一印象是计算记录

the select

也在

having by 

也在

order by 

对我来说影响性能最好使用别名。但这个断言是否正确?或者不是只做一次工作?或者引擎足够智能识别它,只是在后面的调用中替换先前的count(1)值?

我的意思是这个查询会表现得更好吗?

SELECT t.name store,p.id, p.name,count(1)c
FROM regular_shippings sh
JOIN
   products p ON matching columns.
ANOTHER JOINS
WHERE criteria
AND anotherCriteria
GROUP BY p.id
HAVING c>0
ORDER BY t.name,c desc;

对不起,如果问题很简单!

mysql sql group-by count having
1个回答
1
投票

COUNT(1)是聚合的结果(GROUP BY)。它用于

  • 要显示的SELECT子句,
  • HAVING条款中限制结果和
  • ORDER BY条款中进行排序。

这不是三个不同的计数。所以你是否给它别名并不重要。

(旁注:大多数DBMS甚至不允许在SELECT中使用HAVING子句中给出的别名,因为HAVING应该在SELECT之前出现。)

© www.soinside.com 2019 - 2024. All rights reserved.