Реализация функции счета в SQL запросе с внутренними объединениями - PullRequest
1 голос
/ 28 апреля 2020

У меня есть следующий запрос:

 select person.ID, person.personName, round(avg(TIMESTAMPDIFF(DAY,orderDate,shippedDate)),2)) as 'Average' from orders inner join person person.personID= orders.personID where shippedDate is not null group by orders.personID;

Приведенный выше запрос выводит 10 строк. Я хочу добавить поле, которое бы подсчитывало, сколько всего строк в приведенном выше запросе.

Я пытался реализовать функцию SQL COUNT, но борюсь с синтаксисом, так как он имеет INNER JOIN.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

если вы не используете Mysql 8.0, вы можете использовать подзапрос:

select COUNT(*) FROM (
  person.ID,
  person.personName, 
  round(avg(TIMESTAMPDIFF(DAY,orderDate,shippedDate)),2)) as 'Average' from 
  orders inner join person person.personID= orders.personID where shippedDate 
  is not null group by orders.personID
);

, а если вы используете MYSQL 8.0, используйте функцию окна, как показано ниже:

select 
    person.ID, 
    person.personName, 
    round(avg(timestampdiff(day, o.orderDate, o.shippedDate)),2)) average,
    count(*) over() total_no_rows
from orders o
inner join person p on p.personID = o.personID 
where o.shippedDate is not null 
group by p.personID, o.personName
0 голосов
/ 28 апреля 2020

Если вы работаете MySQL 8.0, вы можете указать количество окон:

select 
    person.ID, 
    person.personName, 
    round(avg(timestampdiff(day, o.orderDate, o.shippedDate)),2)) average,
    count(*) over() total_no_rows
from orders o
inner join person p on p.personID = o.personID 
where o.shippedDate is not null 
group by p.personID, o.personName

Обратите внимание, что я сделал несколько исправлений для вашего запроса:

  • псевдонимы таблиц облегчают чтение и запись запроса

  • рекомендуется квалифицировать все имена столбцов в таблице, к которой они принадлежат - я сделал несколько предположений, которые могут вам понадобиться обзор

  • каждый неагрегированный столбец должен принадлежать предложению group by (это хорошая практика и требование в большинстве баз данных)

...