我是新品牌,对我目前的工作很陌生,我看到了以下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;
很抱歉,问题很简单!
答案 0 :(得分:1)
COUNT(1)
是聚合(GROUP BY
)的结果。在
SELECT
子句,HAVING
子句中限制结果,并且ORDER BY
子句中进行排序。这不是三个不同的计数。因此,是否给它起别名都没关系。
(在旁注:大多数DBMS甚至不允许在SELECT
中使用HAVING
子句中给出的别名,因为HAVING
应该在{{ 1}}。)