create table user (
uazon integer primary key, -- uazon N6 a felhasználó azonosítója
mail varchar(50), -- mail C50 a felhasználó e-mail címe
nick varchar(20), -- nick C20 a felhasználó beceneve
pw varchar(15), -- pw C15 a felhasználó jelszava
udatum date, -- udatum DT a felhasználó regisztrációjának ideje
irszam integer, -- irszam N4 a felhasználó lakcímének irányítószáma
uipcim varchar(16), -- uipcim C16 a felhasználó regisztrációjának IP-címe
holtcim tinyint -- holtcim N1 a "halott" felhasználói e-mail címek jelzése
);
create table login (
uazon integer not null references user(uazon), -- uazon N6 a felhasználó azonosítója
lip varchar(16), -- lip C16 a belépéskor használt gép IP-címe
lbe date, -- lbe DT a belépés ideje
bong varchar(2) -- bong C2 a belépéskor használt böngésző
);
insert into user
(uazon, mail , nick , pw , udatum , irszam, uipcim , holtcim) values
( 1, '
[email protected]' , 'elso' , '3l50' , '2020-01-01', 1011 , '1.0.0.0', 0 ),
( 2, '
[email protected]' , 'masodik' , 'j3l520' , '2020-02-02', 2011 , '2.0.0.0', 0 ),
( 3, '
[email protected]' , 'harmadik' , 'h@rm@d1k', '2020-03-03', 1012 , '3.0.0.0', 1 ),
( 4, '
[email protected]' , 'negyedik' , 'n36y3d1k', '2020-04-04', 2012 , '1.0.0.0', 0 ),
( 5, '
[email protected]' , 'otodik' , 'j3l520' , '2020-05-05', 3012 , '2.0.0.0', 0 ),
( 6, '
[email protected]' , 'hatodik' , 'h@t0d1k' , '2020-06-06', 1013 , '3.0.0.0', 1 ),
( 7, '
[email protected]' , 'hetedik' , 'h3t3d1k' , '2020-07-07', 2013 , '1.0.0.0', 0 ),
( 8, '
[email protected]' , 'nyolcadik' , 'j3l520' , '2020-08-08', 3013 , '1.0.0.0', 0 ),
( 9, '
[email protected]', 'kilencedik', 't1tk05' , '2020-09-09', 4013 , '2.0.0.0', 1 ),
( 10, '
[email protected]' , 'tizedik' , 't1tk05' , '2020-10-10', 1014 , '2.0.0.0', 0 );
insert into login
(uazon, lip , lbe , bong) values
( 1, '1.0.0.1' , '2020-01-01', 'fx'),
( 2, '2.0.0.1' , '2021-02-01', 'ie'),
( 3, '3.0.0.1' , '2022-03-01', 'o' ),
( 4, '4.0.0.1' , '2021-04-01', 'fx'),
( 5, '5.0.0.1' , '2022-05-01', 'ie'),
( 7, '7.0.0.1' , '2022-07-01', 'fx'),
( 10, '10.0.0.1', '2020-10-01', 'fx'),
( 2, '2.0.0.2' , '2021-02-02', 'ie'),
( 4, '4.0.0.2' , '2022-04-02', 'o' ),
( 6, '6.0.0.2' , '2021-06-02', 'fx'),
( 10, '10.0.0.2', '2022-10-02', 'o' ),
( 3, '3.0.0.3' , '2022-03-03', 'fx'),
( 6, '6.0.0.3' , '2020-06-03', 'ie'),
( 4, '4.0.0.4' , '2021-04-04', 'fx'),
( 5, '5.0.0.5' , '2022-05-05', 'o' ),
( 10, '10.0.0.5', '2021-10-05', 'fx');
-- 1. Hány felhasználó regisztrált és mikor történt az első, illetve az utolsó regisztráció?
select
count(*) "felhasználók száma",
min(udatum) "első regisztráció",
max(udatum) "utolsó regisztráció"
from user;
-- 2. A regisztrálók hány százaléka budapesti?
select
sum(floor(irszam / 1000) = 1) * 100 / count(*) "budapesti százalék"
from user;
-- 3. A felhasználók közül hányan használják a 'quickmail.org' levelezőrendszert?
select
count(*) "quickmail.org használók száma"
from user
where mail like '%@quickmail.org';
-- 4. A felhasználók közül hányan használják az egyes levelezőrendszereket?
select
substring(mail, locate('@', mail) + 1) "levelezőrendszer",
count(*) "felhasználók száma"
from user
group by substring(mail, locate('@', mail) + 1);
-- 5. Mely IP-címekről regisztrált háromnál több felhasználó?
select
uipcim "IP cím",
count(*) "felhasználók száma"
from user
group by uipcim
having count(*) > 3;
-- 6. Kik azok a felhasználók, akik esetleg ugyanazt a jelszót használják?
select
pw "jelszó",
count(*) "felhasználók száma",
group_concat(uazon) "felhasználók listája"
from user
group by pw
having count(*) > 1;
-- 7. Mely felhasználók nem léptek be sosem?
select
*
from user
where not exists(select * from login where login.uazon = user.uazon);
-- 8. A felhasználók hány százaléka lépett be legalább egyszer a regisztrációt követően?
select
sum(exists(select * from login where login.uazon = user.uazon)) * 100 / count(*) "belépett százalék"
from user;
-- 9. Ki volt az a 12 különböző felhasználó, aki utoljára használta az oldalt? Mi volt az utolsó belépési idejük?
select
uazon "felhasználó",
max(lbe) "utolsó belépés"
from login
group by uazon
order by max(lbe) desc
limit 12;
-- 10. Mely felhasználók nem léptek be az elmúlt egy évben (vagy sosem)?
select
uazon "felhasználó",
login.lbe "régebb mint 1 év vagy soha"
from user
left join (
select
uazon,
max(lbe) lbe
from login
group by uazon
) login using (uazon)
where login.lbe < date_sub(current_date, interval 1 year)
or login.lbe is null;