Запрос подсчета количества записей по условию.

Автор Ириминаге, 16 марта 2022, 12:25

0 Пользователи и 1 гость просматривают эту тему.

Ириминаге

Существует база картриджей. Появилась необходимость получать актуальную информацию о количестве картриджей каждого типа. Но я не смог придумать, какое условие надо использовать для реализации задачи.
Запрос написал такой:
SELECT DISTINCT "ТпКрт"  AS "Тип Картриджа", (SELECT COUNT(*) FROM "Картриджи" WHERE "ТпКрт"=3020 ) AS "Количество"
FROM "Картриджи"


3020 - это один из типов картриджа, и по идее, вместо него должна быть переменная.
Нужен волшебный пендель о том, какое условие следует использовать. Всем бобра!
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

economist

SELECT COUNT(*) FROM "Картриджи" GROUP BY "ТпКрт"


Это если каждый картридж - отдельная строка в таблице Картриджи. Выбывшие картриджи, полагаю, из таблицы удалены?    
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

eeigor

#2
Уточните синтаксис.
Смысл такой:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;

Edit:
Ну, вот: с ответом опоздал, но смысл тот же. COUNT(*), где * означает все записи.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

Ириминаге

#3
Цитата: economist от 16 марта 2022, 12:41
SELECT COUNT(*) FROM "Картриджи" GROUP BY "ТпКрт"


Это если каждый картридж - отдельная строка в таблице Картриджи. Выбывшие картриджи, полагаю, из таблицы удалены?   
Огромное спасибо за ответ!
На самом деле, у картриджей есть куча параметров (Тип, И/Н, дата заправки, количество заправок, выдан, брак, пустой, утиль, заправка, склад), и выборки будут ещё обвешиваться условиями, в зависимости от задачи. То бишь задача не получить общее количество картриджей в базе, а количество по условиям. Поэтому группировку я отмёл сразу, а вот с условиями извлечения у меня затык вышел. Но ваш вариант изумительно показал общее количество, да в форму запроса его вставить не удалось: он не понимает GROUP BY внутри скобок, а снаружи уже не влияет на нужный запрос.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

Ириминаге

Цитата: eeigor от 16 марта 2022, 12:43
Уточните синтаксис.
Смысл такой:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;

Edit:
Ну, вот: с ответом опоздал, но смысл тот же. COUNT(*), где * означает все записи.
Синтаксис и впрямь важен.. этот редиска не желает делать больше одного запроса за раз и UNION на дух не переносит.. Путём курения интернета опробывал разные решения, но компилятор обложил меня матом с ног до головы... пришлось идти сюда.
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

economist

1) В такой задаче как в #0 - не нужен подзапрос в скобках
2) GROUP BY не может быть внутри скобок
3) Чтобы добавить условие, например вывести число заправленных картриджей, пишите что-то вроде

SELECT COUNT(*) FROM "Картриджи" WHERE "Заправлен"="Да" GROUP BY "ТпКрт"

 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Ириминаге

Цитата: economist от 16 марта 2022, 15:15
1) В такой задаче как в #0 - не нужен подзапрос в скобках
2) GROUP BY не может быть внутри скобок
3) Чтобы добавить условие, например вывести число заправленных картриджей, пишите что-то вроде

SELECT COUNT(*) FROM "Картриджи" WHERE "Заправлен"="Да" GROUP BY "ТпКрт"

Я хотел получить два в одном - два столбца: Тип и Количество, но получается, что это нельзя уместить в один запрос?
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...

mikekaganski

SELECT "ТпКрт", COUNT(*) FROM "Картриджи" WHERE "Заправлен"="Да" GROUP BY "ТпКрт"
С уважением,
Михаил Каганский

Ириминаге

Цитата: mikekaganski от 16 марта 2022, 15:43
SELECT "ТпКрт", COUNT(*) FROM "Картриджи" WHERE "Заправлен"="Да" GROUP BY "ТпКрт"
Низкий Вам поклон! Всё работает! И как после этого читать большие мануалы, когда решения проще и прозаичнее..
Он верил в Мир и Здравый Смысл,
В себя, в людей, в любовь, в науку!
Но кто-то Кафку положил,
В его протянутую руку...