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

StalinGrad

  • Участник
  • *****
  • Публикации: 3
    • Профил
SQL задача
« -: Окт 09, 2014, 12:55 »
Здравейте! От няколко дни се мъча с една задача, но все не успявам. Какво ли не пробвах сам, в стаковърфлоу търсих, гуглъл питах и къде ли не и все удрям на камък. Задачата е да се изведат id-то на топика, името на потребителя и администратора подредени по групи в определен ред. Това е таблицата и информацията към нея.

Код
GeSHi (SQL):
  1. CREATE TABLE `saintMeto` (
  2.  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  3.  `thread` INT(10) UNSIGNED NOT NULL,
  4.  `member` VARCHAR(45) NOT NULL,
  5.  `admin` VARCHAR(45) NOT NULL,
  6.  PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
  8.  
  9. // INSERT DATA
  10.  
  11. INSERT INTO `saintMeto` VALUES (1,1,'jazzman','wuser'),(2,4,'hankrum','wuser'),(3,5,'jazzman','avalanche'),(4,3,'pitankata','wuser'),(5,2,'hd','wuser'),(6,1,'jazzman','avalanche'),(7,3,'hd','avalanche'),(8,2,'pitankata','wuser'),(9,3,'pitankata','avalanche'),(10,5,'hd','avalanche'),(11,3,'pitankata','wuser'),(12,4,'hankrum','avalanche'),(13,4,'hd','wuser'),(14,1,'hankrum','avalanche'),(15,2,'jazzman','wuser'),(16,1,'jazzman','avalanche'),(17,5,'jazzman','wuser'),(18,1,'hankrum','wuser'),(19,2,'hd','avalanche');
  12.  


Изхода трябва да бъде

Код
GeSHi (SQL):
  1. +--------+-----------+-----------+----------------------------+
  2. | thread | member    | warning 1 | warning 2                  |
  3. +--------+-----------+-----------+----------------------------+
  4. |      2 | jazzman   | wuser     | NULL                       |
  5. |      2 | pitankata | wuser     | NULL                       |
  6. |      3 | hd        | avalanche | NULL                       |
  7. |      4 | hd        | wuser     | NULL                       |
  8. |      5 | hd        | avalanche | NULL                       |
  9. |      1 | hankrum   | avalanche | wuser                      |
  10. |      2 | hd        | wuser     | avalanche                  |
  11. |      4 | hankrum   | wuser     | avalanche                  |
  12. |      5 | jazzman   | avalanche | wuser                      |
  13. |      1 | jazzman   | wuser     | --More than two warnings-- |
  14. |      3 | pitankata | wuser     | --More than two warnings-- |
  15. +--------+-----------+-----------+----------------------------+
  16. 11 ROWS IN SET (0.00 sec)
  17.  

Понеже не би било коректно да не спомена, задачата с пълното условие към нея е от форума на Гатака - http://nau4i.me/forum/index.php/topic,15951.0.html

Благодаря за отделеното време.
« Последна редакция: Окт 09, 2014, 12:56 от StalinGrad »
Активен

borovaka

  • Участник
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: SQL задача
« Отговор #1 -: Окт 09, 2014, 14:07 »
Разгледай CASE/IF/COUNT/SUM функциите на MySql.
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

StalinGrad

  • Участник
  • *****
  • Публикации: 3
    • Профил
Re: SQL задача
« Отговор #2 -: Окт 22, 2014, 20:43 »
borovaka, тва е все да попитам някой, колко е часа в момента и той да вземе да ми обяснява как работи часовника  :) въпроса ми беше съвсем конкретен. 

Причината да попитам е за това, че имах много близка по състав от колони таблица с тази от примера от форума на Гатака, но в крайна сметка се оправих като я нормализирах и направих още две нови. 
Активен

go_fire

  • Участник
  • *****
  • Публикации: 5140
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: SQL задача
« Отговор #3 -: Окт 23, 2014, 09:05 »
Едно, задачката е неактуална, оти кандисах и им премахнах святото мнение ^-^ Второ, издаваш лична информация, цитирайки имена  8) И трето, беше най-логично да попиташ самият тхе Кънедиън в собствената му тема  :D Успех  >:D

п.п. я пуснал си междувременно връзка, как се излагаме :(
« Последна редакция: Окт 23, 2014, 09:09 от go_fire »
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

StalinGrad

  • Участник
  • *****
  • Публикации: 3
    • Профил
Re: SQL задача
« Отговор #4 -: Окт 23, 2014, 13:33 »
Едно, задачката е неактуална, оти кандисах и им премахнах святото мнение ^-^ Второ, издаваш лична информация, цитирайки имена  8) И трето, беше най-логично да попиташ самият тхе Кънедиън в собствената му тема  :D Успех  >:D

п.п. я пуснал си междувременно връзка, как се излагаме :(

Как си представяш да попитам в същата тема - "Я сега кажете решението, че съм на зор?". Писах му на email, но така и не получих отговор ??? Изчаках 4, 5 дни, седнах и си нормализирах таблицата по съвет на друг мой съфорумец от друг форум. 
Активен

go_fire

  • Участник
  • *****
  • Публикации: 5140
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: SQL задача
« Отговор #5 -: Окт 24, 2014, 09:14 »
Ами тук ти е грешката. Човека виси в чата, можеше там да го издебнеш или на лични. Пощата я му е актуална, я не. Пък и ако не друго, можеше лавината да попиташ, той със сигурност е там и написа, че я е решил. Не съм се занимавал със сял от три-четири години и затова не съм решавал задачата, ако имах отговора, щях да ти го дам.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

4096bits

  • Участник
  • *****
  • Публикации: 3103
    • Профил
Re: SQL задача
« Отговор #6 -: Окт 24, 2014, 12:22 »
Пощата му е актуална. Скоко му писах по един въпрос. Отговори.
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

korea60

  • Участник
  • *****
  • Публикации: 189
    • Профил
Re: SQL задача
« Отговор #7 -: Окт 24, 2014, 22:10 »
Нещо не схващам, цялото условие. Т.е как трябва да е реда за подреждане, а и със сигурност както и да е ти трябва и функцията coalesce, освен споменатите от borovaka.

select thread,member, coalesce(admin) as 'warning 1',
case 'warning 2'

when coalesce(count((admin))) > 1 then admin
when coalesce(count((admin))) > 2 then '--More than two warnings--'
end as  'warning 2'

from saintMeto
group by 1,2,3

Тука обаче незная как да изведесамо distinct-а?
« Последна редакция: Окт 25, 2014, 01:32 от korea60 »
Активен

avalanche

  • Участник
  • *****
  • Публикации: 1
    • Профил
Re: SQL задача
« Отговор #8 -: Мар 08, 2015, 21:06 »
Само не разбирам защо решението на задачата се разисква тука, а не във форума, където беше пусната оригинално...  :o
Както и да е, където си видял задачата, може да намериш и решението.
Активен

console

  • Участник
  • *****
  • Публикации: 243
    • Профил
    • WWW
Re: SQL задача
« Отговор #9 -: Мар 09, 2015, 09:52 »
Пич sorry но ти тази задача ако не можеш да я решиш дори с помоща на google и stakoverflow очевидно нямаш желанието да го направиш.

А да седне някои тука да ти напише елементарно нещо за да си замеш изпита или там каквото е едва ли ще намериш.
Активен

“Ever tried. Ever failed. No matter. Try again. Fail again. Fail Better.”