Получить количество строк запроса - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу, чтобы в моем запросе отображалось общее количество полученных результатов.

Например, если я выполню этот запрос:

SELECT user, email FROM users WHERE user = 'Daniel';

Показать третий столбец с итоговыми строками. С user = 'Daniel' у меня всего 13 записей, и вот как я хочу это показать:

user          email                total
-------------------------------------------------
Daniel        email1@gmail.com     13
Daniel        email2@gmail.com     13
Daniel        email3@gmail.com     13
Daniel        email4@gmail.com     13
....

Возможно ли это сделать?

Ответы [ 3 ]

0 голосов
/ 07 ноября 2019

Я предпочитаю использовать аналитические функции здесь:

SELECT
    user,
    email,
    COUNT(*) OVER () total
FROM users
WHERE user = 'Daniel';

Если вы не можете использовать аналитические функции, потому что вы используете более раннюю версию MySQL, тогда используйте объединение:

SELECT
    u1.user,
    u1.email,
    u2.cnt AS total
FROM users u1
INNER JOIN
(
    SELECT user, COUNT(*) AS cnt
    FROM users
    -- we could also restrict to Daniel here, but I am showing a general
    -- solution for multiple users
    GROUP BY user
) u2
    ON u1.user = u2.user
WHERE
    u1.user = 'Daniel';
0 голосов
/ 07 ноября 2019

Я не понимаю, почему вам требуется одинаковое количество повторений для всех строк в группе. Тем не менее следующий запрос делает то же самое, что вы хотите

    Select user, email, count(distinct *) 
       over
     () as total from table ;
0 голосов
/ 07 ноября 2019

попробуйте как показано ниже

 SELECT u2.user, u2.email,
(select count(*) from users u1 where u1.user=u2.user ) as total
  FROM users u2
 WHERE u2.user = 'Daniel';

в случае, если версия mysql> = 8.0, тогда вы можете использовать оконную функцию count ()

select user,email,count(*) over()  as total
from  users
     WHERE user = 'Daniel'
...