MySQL группа по количеству (1) с - PullRequest
0 голосов
/ 12 сентября 2018

Я новичок в моей нынешней работе и вижу следующее предложение 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 голосов
/ 12 сентября 2018

COUNT(1) является результатом агрегации (GROUP BY). Используется в

  • отображаемое предложение SELECT,
  • в предложении HAVING для ограничения результатов и
  • в предложении ORDER BY для сортировки.

Это не три разных подсчета. Так что не имеет значения, даете ли вы ему псевдоним или нет.

(В примечании: большинство СУБД даже не позволяют использовать псевдоним, указанный в предложении SELECT, в HAVING, так как HAVING должен произойти до SELECT.)

...