Автор Тема: SQL-задачка - закачка  (Прочетена 15772 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
SQL-задачка - закачка
« -: 06 Юли 2015, 02:20:42 »
Имаме две таблици - Gamers и Points. Условието на задачата е да се намерят имената на играчите, сбора от последната играна седмица (ScoreWeek), както и пълният сбор за месеца (ScoreTotal) или (ScoreMonth) ). Изхода да се подреди (order by) по точките за месеца за всеки играч.

Давам инфото от таблиците:

Код: SQL
  1. CREATE TABLE `GAMERS` (
  2.   `ID` INT(11) NOT NULL,
  3.   `GAMERID` INT(11) NOT NULL,
  4.   `FIRSTNAME` VARCHAR(45) DEFAULT NULL,
  5.   `LASTNAME` VARCHAR(45) DEFAULT NULL,
  6.   PRIMARY KEY (`ID`)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  8.  
  9. CREATE TABLE `POINTS` (
  10.   `ID` INT(11) NOT NULL,
  11.   `GAMERID` INT(11) NOT NULL,
  12.   `WEEK` INT(11) NOT NULL,
  13.   `SCORE` INT(11) NOT NULL,
  14.   PRIMARY KEY (`ID`)
  15. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  16.  
  17. // INSERT DATA
  18.  
  19. INSERT INTO `POINTS` VALUES (1,1,1,4),(2,2,1,1),(3,3,1,3),(4,1,2,0),(5,2,2,4),(6,3,2,1),(7,3,3,1),(8,2,3,5),(9,1,3,2),(10,2,4,2),(11,1,4,3),(12,3,4,0);
  20.  
  21. INSERT INTO `GAMERS` VALUES (1,1,'jazzman','jazz'),(2,2,'canoncho','canon'),(3,3,'Avalanche','Ava'),(4,4,'HD','HD'),(5,1,'jazzman','jazz');
  22.  
  23.  

Резултата да бъде подобно на:

Код: Bash
  1. +-----------+----------+---------+------+-----------+------------+
  2. | FIRSTNAME | LASTNAME | GAMERID | WEEK | ScoreWeek | ScoreTotal |
  3. +-----------+----------+---------+------+-----------+------------+
  4. | canoncho  | canon    |       2 |    4 |         2 |         12 |
  5. | jazzman   | jazz     |       1 |    4 |         6 |          9 |
  6. | Avalanche | Ava      |       3 |    4 |         0 |          5 |
  7. +-----------+----------+---------+------+-----------+------------+
  8. 3 rows in set (0.00 sec)
  9.  
  10.  
« Последна редакция: 07 Юли 2015, 23:25:56 от Avalanche »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: SQL-задачка - закачка
« Отговор #1 -: 06 Юли 2015, 20:34:32 »





ИДЕЯ
Айде давайте идеи и да я разплетем заедно ако ви се струва толкова сложна
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

canon4o

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 18
  • -Получени: 33
  • Публикации: 324
Re: SQL-задачка - закачка
« Отговор #2 -: 06 Юли 2015, 22:01:38 »
Когато ученикът надминава учителя ;D
Та.. Jazz, имаш правописна грешка в таблицата. На твоите точки за седмицата трябва да имаш 3, а не 6 :)

TROLL
Код: MySQL
  1.     g.FIRSTNAME,
  2.         g.LASTNAME,
  3.         g.GAMERID,
  4.         p.WEEK,
  5.         SUM(p.SCORE),
  6.         (SELECT SUM(pp.SCORE) FROM `POINTS` as pp WHERE pp.GAMERID = g.ID) as ScoreTotal
  7.     `GAMERS` as g
  8. INNER JOIN `POINTS` as p ON p.GAMERID = g.ID
  9. WHERE p.WEEK = (SELECT ppp.WEEK FROM `POINTS` as ppp WHERE ppp.GAMERID = g.ID ORDER BY ppp.WEEK DESC LIMIT 1)
  10. GROUP BY p.GAMERID
  11. ORDER BY ScoreTotal DESC

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: SQL-задачка - закачка
« Отговор #3 -: 06 Юли 2015, 23:47:36 »
Друга идея да вземеш резултатите за последната седмица:

Код: MySQL
  1. WHERE POINTS.WEEK = (SELECT MAX(WEEK) FROM POINTS)
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: SQL-задачка - закачка
« Отговор #4 -: 07 Юли 2015, 00:24:47 »
Цитат
Та.. Jazz, имаш правописна грешка в таблицата. На твоите точки за седмицата трябва да имаш 3, а не 6 :)

И аз го видях това, че мойте точки са различни от вашите, ама немах време днес да си чекна таблицита ;) Може би съм ви дал някаква друга дейта различна от мойта.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: SQL-задачка - закачка
« Отговор #5 -: 07 Юли 2015, 01:24:20 »
Хм....подвел съм ви. Изтрих всичко и създадох таблиците както съм ви ги дал и получих правилният резултат  ;D

Ето и моето решение:

TROLL
Код: SQL
  1. SELECT g.FIRSTNAME, g.LASTNAME,p.GAMERID,p.WEEK,p.SCOREWEEK,tot.SCORETOTAL FROM GAMERS g
  2. INNER JOIN (
  3. SELECT GAMERID, WEEK, SUM(SCORE) AS SCOREWEEK FROM POINTS
  4. WHERE WEEK = (
  5. SELECT MAX(WEEK) FROM POINTS)
  6. GROUP BY GAMERID) AS p ON (g.GAMERID=p.GAMERID)
  7. INNER JOIN (
  8. SELECT gamerid, SUM(score) AS SCORETOTAL FROM POINTS
  9. GROUP BY GAMERID) AS tot ON (tot.GAMERID = p.GAMERID)
  10. GROUP BY GAMERID
  11. ORDER BY SCORETOTAL DESC
  12.  

 A сега напишете заявката така, че да бъде според SQL стандарта, щото в FireBird гърмят яко грешки ако рънна тоз код  :)

 Канончо, верно е - надминал си ма  ;D


Сложих решението ти в трол таг да не се спилват отговорите, за хората, които все пак искат сами да стигнат до решението - надявам се не възразяваш
« Последна редакция: 07 Юли 2015, 19:47:19 от Avalanche »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: SQL-задачка - закачка
« Отговор #6 -: 07 Юли 2015, 13:50:56 »
Ученико, заявката ти е логически неправилна. Ако променя ID-та на jazzman, canoncho или avalanche, ще получа 0-лев резултат, понеже си вързал gamerid-то към id-то на потребителите.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: SQL-задачка - закачка
« Отговор #7 -: 07 Юли 2015, 19:41:08 »
Ето го и моето решение, доста идентично с това на канона:

TROLL
Код: MySQL
  1.     G.FIRSTNAME, G.LASTNAME, G.GAMERID,
  2.     P.WEEK, (
  3.         SELECT SUM(SCORE)
  4.         FROM POINTS
  5.         WHERE GAMERID = G.GAMERID AND WEEK = P.WEEK
  6.     ) AS ScoreWeek,
  7.     (
  8.         SELECT SUM(SCORE)
  9.         FROM POINTS
  10.         WHERE GAMERID = G.GAMERID
  11.     ) AS ScoreMonth
  12. FROM GAMERS AS G
  13. LEFT JOIN POINTS AS P
  14.     ON G.GAMERID = P.GAMERID
  15. GROUP BY FIRSTNAME ORDER BY ScoreMonth DESC;


A сега напишете заявката така, че да бъде според SQL стандарта, щото в FireBird гърмят яко грешки ако рънна тоз код  :)

Загуба на време, по-добре да измислим как да се оптимизира заявката.
« Последна редакция: 07 Юли 2015, 21:03:00 от Avalanche »
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: SQL-задачка - закачка
« Отговор #8 -: 07 Юли 2015, 20:35:16 »
Хубава работа и твойта е логически неправилна  :)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: SQL-задачка - закачка
« Отговор #9 -: 07 Юли 2015, 20:45:21 »
Ученико, заявката ти е логически неправилна. Ако променя ID-та на jazzman, canoncho или avalanche, ще получа 0-лев резултат, понеже си вързал gamerid-то към id-то на потребителите.
Хубава работа и твойта е логически неправилна  :)

Мислех че идеята на ID-то е точно затова, да не се променя.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: SQL-задачка - закачка
« Отговор #10 -: 07 Юли 2015, 20:59:37 »
Разбира се, че не възразявам - ти си шефа ;) ID-то е затова да не се променя, но тук говоря, че заявките са ви логически неверни и на двамата. Aко долуснем, че jazzman, canoncho и avalаnche са с ID - 7,8,9 примерно, ваште заявки фейлват щото са вързани статично към ID-то и Gamerid-то на всеки един от тях. Предполагам, че и друго ще намеря като грешки, но нямам времето сега. 
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

HanKrum

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 125
  • -Получени: 73
  • Публикации: 1005
  • Кибик
Re: SQL-задачка - закачка
« Отговор #11 -: 07 Юли 2015, 21:01:59 »
TROLL
Поне ограждайте week с кавички щот нали знаете, че си е запазена думичка: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week
"Силата на правителството се крепи на невежеството на народа, и те знаят това и винаги ще се борят против просвещението." Лев Толстой

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: SQL-задачка - закачка
« Отговор #12 -: 07 Юли 2015, 21:06:08 »
Епа така кажи бе, музиканте, ние не видим че и двете таблици имат поле GAMERID.

П.п. И не съм никакъв шеф (поне не ми дават заплата за такъв). Хане, то и имената на полетата е кофти да са с главни...
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 191
  • Публикации: 3624
Re: SQL-задачка - закачка
« Отговор #13 -: 07 Юли 2015, 21:22:43 »
Наборе, аз нямам проблем с WEEK :) Aва, шеф си шеф си даже и без заплата ;) Оправи си заявката и дай да я погледнем отново. Не е лоша идеята да е с главни букви, въпрос на навик.

ПП Абе защо форума зарежда страшно бавно при мен? Променихте ли хост компанията? Опитвам се да отговоря на антигуугле но се зарежда 5 мин?
« Последна редакция: 07 Юли 2015, 21:24:42 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: SQL-задачка - закачка
« Отговор #14 -: 07 Юли 2015, 21:31:35 »
Ние използваме бутона "промени" :)

Отвори друга тема за проблема със зареждането, направи и снимка на конзолата кой ресурс се бави толкова.
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!