Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Jak na vnořený Select v MySQL

Dobrý den,
poradil by mi prosím někdo zkušenější jak vyřešit "učísnutí" dat v tabulce?
Mám v MySQL datovou tabulku, která obsahuje 3 sloupce (1=hodnota, 2=velikost, 3=symbol pro zgrupování)
dotazem :

SELECT Hodnota, SUM(Velikost)
FROM tabulka
WHERE Symbol = "1"
GROUP BY Hodnota
ORDER BY Hodnota DESC;

získám sice to co potřebuji ale jen pro symbol "1", háček je v tom, že v primární tabulce těchto symbolů je víc, ("2", "3",...) a já bych je potřeboval takto projít všechny a tyto dílčí výsledky nakonec sloučil do jedné výstupní tabulky kde klíčem spojení mezi nimi bude Hodnota.
Doufám že popis problému je alespoň trochu srozumitelný :-)

Výstupní tabulka by měla tedy vypadat asi takto:
|Hodnota|SumaVelikosti za hodnotu a symbol "1"|SumaVelikosti za hodnotu a symbol "2"|.. atd..

Budu moc rád za jakoukoliv radu vedoucí k cíli.
ensin

Předmět Autor Datum
Že získáš výpis jen pro Symbol="1", způsobuje podmínka WHERE Symbol = "1". Ta určitě musí pryč. Zku…
hynajs 03.02.2010 13:07
hynajs
Ještě upřesnění : SELECT Hodnota, Symbol, SUM(Velikost) FROM tabulka GROUP BY concat(Hodnota,Symbol…
hynajs 03.02.2010 13:08
hynajs
to je super! Díky moc za tip. dohledal jsem si hned na MySQL.com co dělá concat a funguje to. Mám a… nový
ensin 03.02.2010 14:10
ensin
1.Ještě k tomu concat : v tomto případě bude asi zbytečný, zkus to jen takhle : SELECT Hodnota, Sym… nový
hynajs 03.02.2010 14:40
hynajs
Předpokládám, že množina hodnot symbolů (nebo aspoň jejich počet) je ti dopředu známa (znám). Asi by… nový
hynajs 03.02.2010 18:58
hynajs
jo, dá se říct, že množina hodnot symbolů, respektive jejich počet je znám. Dá se zjistit přes COUNT… nový
ensin 03.02.2010 20:02
ensin
Napíš si všetky všetky SQL pre každú hodnotu. Potom tie SQL daj do zátvorky a medzi tie príkazy napí… poslední
msx. 03.02.2010 20:07
msx.

Že získáš výpis jen pro Symbol="1", způsobuje podmínka WHERE Symbol = "1".
Ta určitě musí pryč.

Zkus :

SELECT Hodnota, SUM(Velikost)
FROM tabulka
GROUP BY concat(Hodnota,Symbol)
ORDER BY Hodnota DESC;

to je super! Díky moc za tip.
dohledal jsem si hned na MySQL.com co dělá concat a funguje to.

Mám ale pořád potíž s tím, že bych potřeboval z toho na konci dostat tabulku,
která ty grupy za jednotlivé symboly bude mít pro každý symbol ve zvláštním sloupci,
s tím že primárním klíčem ke spojení bude jen Hodnota.
Něco jako v Excelu umí kontingenční tabulka. Víš co myslím?

1.Ještě k tomu concat : v tomto případě bude asi zbytečný, zkus to jen takhle :

SELECT Hodnota, Symbol, SUM(Velikost)
FROM tabulka
GROUP BY Hodnota,Symbol
ORDER BY Hodnota DESC;

Pokud s concat, tak by se měla Hodnota doplnit mezerami, jinak by se dal vymyslet příklad, kdy by dotaz dopadnul blbě.

2. Zkus sem dát návrh výsledné tabulky, podívám se. Ale možná až pozdě večer, musím teď pracovat.

Předpokládám, že množina hodnot symbolů (nebo aspoň jejich počet) je ti dopředu známa (znám).
Asi by bylo nejlepší, kdyby sis založil novou tabulku stejné struktury jako je požadovaná výstupní.
A naplnil ji příkazy INSERT ... SELECT a UPDATE ... SELECT, kde SELECT je dotaz syntaxe uvedené nahoře.
Potíž může nastat, když by nějaká hodnota např. měla symbol "2" a neměla "1" , jinými slovy když by se pro nějakou hodnotu muselo rozhodovat mezi INSERT a UPDATE.
To by měla vyřešit jednoduchá stored procedure.
Já už jsem ale dlouho žádnou nepsal, obdobné věci dělám přes PHP.

jo, dá se říct, že množina hodnot symbolů, respektive jejich počet je znám.
Dá se zjistit přes COUNT. To s tím založit si výstupní tabulku v požadovaném formátu zní dobře.
To že nějaká hodnota má symbol "2" a nemá "1" je velmi pravděpodobné že nastane.
Po pravdě, dokázal bych si tu výstupní tabulku vygenerovat v .NETu, ale protože jsem si teď
celkem zamiloval databáze, konkrétně MySQL a nejsem ještě v tom moc "opráskanej" představoval jsem si
že SQLko dokáže zchroupnout tu tabulku přes "nějaký" např. vnořený SELECT (což by mělo asi být i rychlejší a efektivnější než to kousat řádek po řádku v .NETu) a do .NETu si potom už
nechám poslat jen výsledek.
Potíž je, že zatím nevím (respektive nemám představu) jak to uchopit ze strany SQL. Vzorek té výstupní tabulky mám v Excelu. Nechci tě nějak zatěžovat, každý má toho svého většinou až nad hlavu, ale pokud bys mi s tím mohl nějak pomoct, co říct, bylo by to prostě moc fajn.
Je na tebe např. nějaký mejl kam bych ti to mohl event. přeposlat?
Můj je ensinzavináčemailcz.
Předem dík za případnou ochotu.

Napíš si všetky všetky SQL pre každú hodnotu. Potom tie SQL daj do zátvorky a medzi tie príkazy napíš slovo UNION. Slúži na spájanie tabuliek. Možno je aj lepšie riešenie, ale toto je aspoň dočasne použiteľné.

Zpět do poradny Odpovědět na původní otázku Nahoru