#mysql #sql #sqlite
#mysql #sql #sqlite
Вопрос:
У меня есть таблица, подобная этой введите описание изображения здесь
Мне нужно получить только те данные, возраст которых > 10, вместе с этим мне нужно получить общее количество записей, присутствующих в таблице. т. е. в этом примере это 4 записи. что мне нужно, так это в одном запросе мне нужно получить общее количество записей, присутствующих в таблице и столбцах, которые я запрашиваю.
Запрос будет выглядеть примерно так
SELECT ID, NAME, count(TOTAL NUMBER OF RECORDS IN TABLE) as Count from MYTABLE WHERE AGE > 10
Есть идеи по этому поводу?
Ответ №1:
Вы можете использовать подзапрос в FROM
предложении:
SELECT ID, NAME, c.cnt as Count
FROM MYTABLE CROSS JOIN
(SELECT COUNT(*) as cnt FROM MYTABLE) c
WHERE AGE > 10 ;
Обе базы данных поддерживают оконные функции, но они здесь не очень полезны, потому что количество не фильтруется таким же образом, как внешний запрос. Если вам нужен фильтр для обоих, то в самых последних версиях вы можете сделать:
SELECT ID, NAME, COUNT(*) OVER () as cnt
FROM MYTABLE
WHERE AGE > 10 ;
Ответ №2:
Вы можете попробовать ниже — используя скалярный подзапрос
SELECT ID, NAME, age,(select count(*) from mytable WHERE AGE > 10) as Count
from MYTABLE
WHERE AGE > 10