Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Komu se nelení,
tomu se zelení.

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub Database (mysql,...) [ŽP: neomezená] (kategorie Programování) moderuje melkor_unlimited.
Archiv
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: vixuewn
[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
etdirloth EtDirloth 6.9.2012 21:31  1452
knedle: presne to som ti chcel napisat, ze ti stacia dva agregaty (suma alebo pocet)
themajkl: to sa nemusi vyplatit pri velkych poctoch, pretoze tam nevies pouzit index; osobne by som si tam dal druhy stlpec -> "like_positive" (dislike indikuje nulou) a skusil kludne:
select count(*), sum(like_positive) ... group by interpret_id, song_id
a potom porovnal query plan oproti dvom samostatnym dotazom s where [like|dislike]
knedle knedle online - Krabice živých 6.9.2012 21:01  1451
themajkl [1449]: díky, funguje

SELECT `interpret_id`, `song_id`, SUM(`like`) as likeRating,
SUM(case when `like` > 0 then 1 else 0 end) as plusLike,
SUM(case when `like` < 0 then 1 else 0 end) as minusLike
FROM `rating`
group by `interpret_id`, `song_id`
order by likeRating ASC
knedle knedle online - Krabice živých 6.9.2012 20:40  1450
hmm - tak me napadlo, ze potrebuju jen :

- pocet kladnych like
- pocet zapornych like

zbytek z toho dopocitam

themajkl - mrknu zda to muzu udelat takto ja

themajkl themajkl All those moments will be lost in time - like tears in rain. 6.9.2012 11:23  1449
V Informixu bych to udělal přes
select ...
sum(case when like=1 then 1 else 0 end),
sum(case when like=-1 then 1 else 0 end),
...
knedle knedle online - Krabice živých 6.9.2012 11:07  1448
dotaztab: log:

id (AI)
interpret_id
song_id
day (nepodstatne)
like (obsahuje INT 1 nebo -1)

jde jednim SQL dotazem ziskat:

- pocet like celkem u interpret_id+song_id
- suma like u interpret_id+song_id

(tohle je bez problemu)

ale taky:
- pocet kladnych like
- pocet zapornych like

a razeni podle techto 4 vystupu

delat 3 dotazy se mi moc nechce...


knedle knedle online - Krabice živých 24.4.2012 09:53  1447
huh [1446]: jop - prave timto smerem sem se uz vydal

ja totiz to chtel puvodne spocitat uz v tom pohledu, bez mezikroku... chtěl jsem toho moc...
huh huh 24.4.2012 09:31  1446
knedle [1444]: no to by melo jit:
pohled_realita: ukol_id, datum, sum(cas) … group by ukol_id, datum
a pak spojit plan a pohled_realita pres ukol_id a datum
nebo v cem je problem?
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 24.4.2012 09:05  1445
pepakyes, to bude ono, jen bude problem pokud budou duplicity ale to uz nejak osefuju, dik
knedle knedle online - Krabice živých 24.4.2012 09:05  1444
dotazpotrebuju porovnat casy ze dvou tabulek - plan a realita, kdy:

plan
- ...
- ukol_id - coz je spojovaci prvek spolecne s datumem
- datum
- cas (time - napr 3:30)

realita
- ...
- ukol_id
- datum
- cas

struktura je podobna, ale bacha v realite muze byt nekolik radku se shodnym datumem a ukol_id

a ja potrebuju porovnat cas planu (dle data a ukolu) vuci (souctu) reality stejneho data a ukolu

rikam si, ze si udelam pohled, ale nejak se mi nedari to skloubit
pepak pepak - Pepak.net 24.4.2012 09:02  1443
Jde, ale nijak zvlášť pěkně - chce to subselect: jedním selectem vytáhneš A a MAX(B), to pak použiješ jako jednu tabulku a najoinuješ k ní druhou tabulku s C. Něco takového:

SELECT t1.A, t1.B, t2.c
FROM (SELECT A, MAX(B) AS B FROM tabulka GROUP BY A) t1
JOIN tabulka t2 ON t2.A=t1.A AND t2.B=t1.B
knedle knedle online - Krabice živých 24.4.2012 09:00  1442
napadá mě jen maxnout v concatu ? teda pokud to jde

ale budes mit string, ne 3 sloupce
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 24.4.2012 08:11  1441
vysledek by tedy mel byt:
A B C

text 1, 36, 8
text 2, 92, 9
text 3, 50, 0
tvx tvx Myslet si, že svět je JEN takový, jak - ho v daný čas můžeme pochopit je hloupé. 24.4.2012 08:10  1440
je nějaká možnost, vytáhnout z tabulky vypadající nějak takto:

A B C
text 1, 12, 3
text 1, 15, 5
text 1, 36, 8
text 2, 92, 9
text 2, 18, 6
text 3, 50, 0

vzdy jen jeden unikatni sloupec A, k nemu maximum sloupec B a k tomu hodnotu ze sloupce C ktera je ve stejnem radku jako to maximum ve sloupci B?

pomoci group by to zvladnu az potud, kdy potrebuju ziskat zbytek radku kde je to maximum a ztracim nadeji ze tovubec nejak lze :(
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 29.3.2012 07:11 - Oblíbené kluby (11:20) 1439
omlouvám sesafra akorát jsem přišel na chybu - překlep
správně má být:

SELECT id_column_a_1, column_a_2, column_a_3, column_b_2, id_column_b_1, column_c_2, id_column_c_1
FROM
((`abc_table_a` LEFT JOIN `abc_table_b` ON abc_table_a.column_a_3 = abc_table_b.id_column_b_1)
LEFT JOIN `abc_table_c` ON abc_table_b.column_b_3 = abc_table_c.id_column_c_1)
ORDER BY column_b_2 DESC
LIMIT 10;
puschpull puschpull být nad věcí, pohoda a klid ... - AV-Com (Homepage) 29.3.2012 07:09 - Oblíbené kluby (11:20) 1438
dotaz - vícenásobný JOINmám tři cvičné tabulky:


-- Adminer 3.3.4 MySQL dump

SET NAMES utf8;
SET foreign_key_checks = 0;
SET time_zone = 'SYSTEM';
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

USE `puschpullorg_portfolio`;

DROP TABLE IF EXISTS `abc_table_a`;
CREATE TABLE `abc_table_a` (
`id_column_a_1` int(10) NOT NULL auto_increment,
`column_a_2` varchar(64) NOT NULL,
`column_a_3` int(10) NOT NULL,
PRIMARY KEY (`id_column_a_1`),
KEY `column_a_3` (`column_a_3`),
CONSTRAINT `abc_table_a_ibfk_1` FOREIGN KEY (`column_a_3`) REFERENCES `abc_table_b` (`id_column_b_1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `abc_table_a` (`id_column_a_1`, `column_a_2`, `column_a_3`) VALUES
(1, 'Adam', 4),
(2, 'Bruno', 1),
(3, 'Carl', 2),
(4, 'Mary', 2),
(5, 'John', 3),
(6, 'Paul', 3),
(7, 'Nancy', 1);

DROP TABLE IF EXISTS `abc_table_b`;
CREATE TABLE `abc_table_b` (
`id_column_b_1` int(10) NOT NULL auto_increment,
`column_b_2` varchar(64) NOT NULL,
`column_b_3` int(10) NOT NULL,
PRIMARY KEY (`id_column_b_1`),
KEY `column_b_3` (`column_b_3`),
CONSTRAINT `abc_table_b_ibfk_1` FOREIGN KEY (`column_b_3`) REFERENCES `abc_table_c` (`id_column_c_1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `abc_table_b` (`id_column_b_1`, `column_b_2`, `column_b_3`) VALUES
(1, 'Child', 1),
(2, 'Student', 1),
(3, 'Worker', 1),
(4, 'Soldier', 1);

DROP TABLE IF EXISTS `abc_table_c`;
CREATE TABLE `abc_table_c` (
`id_column_c_1` int(10) NOT NULL auto_increment,
`column_c_2` varchar(64) NOT NULL,
PRIMARY KEY (`id_column_c_1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `abc_table_c` (`id_column_c_1`, `column_c_2`) VALUES
(1, 'London'),
(2, 'Dublin'),
(3, 'Paris'),
(4, 'Madrid'),
(5, 'Prague');

-- 2012-03-29 07:40:23




a chci zkusit propojení
do výsledné tabulky dotazem:



SELECT id_column_a_1, column_a_2, column_a_3, column_b_2, id_column_b_1, column_c_2, id_column_c_1
FROM
((`abc_table_a` LEFT JOIN `abc_table_b` ON abc_table_a.column_a_3 = abc_table_b.id_column_b_1)
LEFT JOIN `abc_table_c` ON abc_table_b.column_b_2 = abc_table_c.id_column_c_1)
ORDER BY column_b_2 DESC
LIMIT 10;


vysledek je bohužel toto:


Jak dosáhnout aby poslední dva sloupce výsledné tabulky obsahovala data ze třetí tabulky?

Děkuji


[ 1008 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt