MySQL按count(1)分组

时间:2018-09-12 11:13:32

标签: mysql sql group-by count having

我是新品牌,对我目前的工作很陌生,我看到了以下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;

很抱歉,问题很简单!

1 个答案:

答案 0 :(得分:1)

COUNT(1)是聚合(GROUP BY)的结果。在

中使用
  • 要显示的SELECT子句,
  • HAVING子句中限制结果,并且
  • ORDER BY子句中进行排序。

这不是三个不同的计数。因此,是否给它起别名都没关系。

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