powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с запросом
5 сообщений из 5, страница 1 из 1
Помогите с запросом
    #39696618
AcidByte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, уважаемые гуру

Имеется таблица
авторCREATE TABLE `participants` (
`participantscode` integer PRIMARY KEY AUTOINCREMENT UNIQUE,
`firstname` text NOT NULL,
`name` text NOT NULL,
`secondname` text,
`pclass` integer ( 4 ),
`pcharacter` TEXT,
`zachet` boolean DEFAULT 0

);

insert into participants (firstname, name, secondname, pclass, pcharacter, zachet) values('Зеленова', 'Надежда', 'Андреевна', 8, 'А', 1);
insert into participants (firstname, name, secondname, pclass, pcharacter, zachet) values('Петров', 'Олег', 'Витальевич', 8, 'А', 0);
insert into participants (firstname, name, secondname, pclass, pcharacter, zachet) values('Иванов', 'Александр', 'Михайлович', 8, 'А', 1);
insert into participants (firstname, name, secondname, pclass, pcharacter, zachet) values('Борисов', 'Константин', 'Львович', 8, 'Б', 1);
insert into participants (firstname, name, secondname, pclass, pcharacter, zachet) values('Белова', 'Валентина', 'Олеговна', 8, 'Б', 0);
insert into participants (firstname, name, secondname, pclass, pcharacter, zachet) values('Сергеев', 'Антон', 'Иванович', 8, 'А', 1);



Нужно составить запрос который бы выводил Класс, Букву, Количество получивших зачет (zachet = 1), Общее количество


Могу посчитать общее количество:
авторselect pclass, pcharacter, count(*) from participants

group by pclass, pcharacter

Или количество получивших зачет:

авторselect pclass, pcharacter, count(*) from participants

where zachet = 1
group by pclass, pcharacter

А как это вместе объединить не могу разобраться.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39696657
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если zachet у тебя всегда 1 или 0, то его можно не считать, а суммировать.
Код: sql
1.
2.
3.
select pclass, pcharacter, count(*), sum(zachet)
 from participants
group by pclass, pcharacter




Для более сложных вещей подобного типа можно использовать WITH

И очень советую полистать англо-русский словарь. Имена колонок чрезвычайно смущают.
...
Рейтинг: 0 / 0
Помогите с запросом
    #39696736
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. не надо плодить людей в системе
сделайте 1 таблицу - users и раскидайте их по группам (отдельная таблица). всё.
одни и те же юзеры могут быть как клиентами, так и пользователями системы, и даже 'participants'

2. человекоподобные названия для колонок:
id int unsigned auto_increment,
name1 varchar(64) not null,
name2 varchar(64),
name3 varchar(64),
class tinyint not null,
letter char(1),
passed timestamp,
added timestamp default now()

3. кошег'ный INSERT:
INSERT INTO participants (name1, name2, name3, class, letter, passed) VALUES
('Зеленова', 'Надежда', 'Андреевна', 8, 'А', now()),
('Петров', 'Олег', 'Витальевич', 8, 'А', null),
('Сергеев', 'Антон', 'Иванович', 8, 'А', now());
...
Рейтинг: 0 / 0
Помогите с запросом
    #39696737
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но это при условии, что passed у юзера бывает только раз в жизни (что маловероятно), а иначе его пихать в другую таблицу и погружаться в нормализацию
...
Рейтинг: 0 / 0
Помогите с запросом
    #39696738
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
DROP TABLE IF EXISTS participants;

CREATE TABLE participants (
id int AUTO_INCREMENT,
name1   varchar(64) NOT NULL,
name2 varchar(64),
name3 varchar(64),
class   tinyint NOT NULL,
letter char(1) NOT NULL,
passed timestamp NULL default NULL,
added timestamp default now(),

PRIMARY KEY (id)
);

INSERT INTO participants (name3, name1, name2, class, letter, passed) VALUES
('Зеленова', 'Надежда', 'Андреевна', 8, 'А', now()),
('Петров', 'Олег', 'Витальевич', 8, 'А', null),
('Иванов', 'Александр', 'Михайлович', 7, 'А', now()),
('Борисов', 'Константин', 'Львович', 8, 'Б', now()),
('Белова', 'Валентина', 'Олеговна', 8, 'Б', null),
('Сергеев', 'Антон', 'Иванович', 8, 'А', now());


SELECT class, letter, count(*) AS passed_total
FROM participants
WHERE passed IS NOT NULL
GROUP BY passed, class, letter
;

SELECT count(*) AS cnt_total FROM participants;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]