Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с запросом / 5 сообщений из 5, страница 1 из 1
01.09.2018, 14:08
    #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
01.09.2018, 16:29
    #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
02.09.2018, 00:40
    #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
02.09.2018, 00:42
    #39696737
полудух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
но это при условии, что passed у юзера бывает только раз в жизни (что маловероятно), а иначе его пихать в другую таблицу и погружаться в нормализацию
...
Рейтинг: 0 / 0
02.09.2018, 01:10
    #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
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Помогите с запросом / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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