Zimní výprodej C/C++ week
Pouze tento týden sleva až 80 % na e-learning týkající se C/C++
40 % bodů zdarma díky naší Zimní akci!
Avatar
Týna
Člen
Avatar
Týna:20.5.2019 5:32

Ahoj, chtěla bych se zeptat,zda existuje něco co mi může spočítat počet stejných hodnot v řádku. Například mám třicet slouců a hodnoty ano, ne tak jestli existuje něco, co mi spočítá třeba počet hodnot ano. Dík

 
Odpovědět
20.5.2019 5:32
Avatar
Jaroslav Smrž
Šéfredaktor
Avatar
Jaroslav Smrž:20.5.2019 7:07

Ahoj, k tomu, co potřebuješ se používá GROUP BY.

SELECT hodnota, SUM(nazev) FROM tabulka WHERE podminka GROUP BY hodnota";
Nahoru Odpovědět
20.5.2019 7:07
/* Life runs on code */
Avatar
Jaroslav Smrž
Šéfredaktor
Avatar
Odpovídá na Týna
Jaroslav Smrž:20.5.2019 7:09

Ty ale nechceš sčítat hodnoty, takže místo SUM bude COUNT

Nahoru Odpovědět
20.5.2019 7:09
/* Life runs on code */
Avatar
Odpovídá na Jaroslav Smrž
Michal Haňáček:20.5.2019 8:33

To co radis ale scita (at uz hodnoty, nebo vyskyty) ve sloupcich. Jestli dotaz chapu dobre, tak slecna/pani potrebuje scitat hodnoty v ramci radku. Aktualne (sedim si mozna na vedeni) me napada reseni pres union select je to ale desne neprehledne, blbe na udrzbu a neskutecne neefektivni ...

Nahoru Odpovědět
20.5.2019 8:33
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
Odpovídá na Týna
Tomáš Novotný:20.5.2019 8:53

Zajímavé, v SQL jsem toto zatím řešit nepotřeboval. Ale od jinud. Když neexistovala rozumná funkce pro 'sčítání' v řádku, tak jsem používal transponování tabulky/řádku tj. prohození x->y. Z řádků se staly sloupce a naopak. Zkus se mrknout na funkce PIVOT() UNPIVOT().

Nahoru Odpovědět
20.5.2019 8:53
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na Týna
Uživatel sítě :20.5.2019 8:55

Ahoj v případě celých čísel stačí sečíst výpis tabulek:

SELECT col1 + col2 AS total FROM table
WHERE id = 1

V případě řetězců by se dalo použít něco takového:

// Celkem ano
SELECT IF(col1 = 'yes', 1, 0) + IF(col2 = 'yes', 1, 0) AS totalYes FROM table
WHERE id = 1

// Celkem ne
SELECT IF(col1 = 'no', 1, 0) + IF(col2 = 'no', 1, 0) AS totalNo FROM table
WHERE id = 1
Editováno 20.5.2019 8:57
Nahoru Odpovědět
20.5.2019 8:55
Chybami se člověk učí, běžte se učit jinam!
Avatar
Odpovídá na Uživatel sítě
Tomáš Novotný:20.5.2019 9:08

Uživatel sítě Chápu správně, že by se toto dalo použít na nějaké dynamickém sloupci? Tj. mít to k dispozici rovnou pro celou tabulku a ne to vždy nasčítávat pro jedno id?

Nahoru Odpovědět
20.5.2019 9:08
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Tomáš Novotný
Peter Mlich:20.5.2019 13:15

Nevim, jak moderni db, ale ma predstava o tabulce je pevny pocet sloupcu. Dynamiku ma smysl resit v pripade, ze casem pridas dalsi a jsi liny opravit sql dotazy.

 
Nahoru Odpovědět
20.5.2019 13:15
Avatar
Odpovídá na Peter Mlich
Tomáš Novotný:20.5.2019 14:13

Možná jsem se nepřesně vyjádřil. Měl jsem na mysli sloupec, který tam bude vždy, ale jeho obsah bude dán výpočtem .. tj. bude se aktualizovat dynamicky na základě změny obsahu sloupců, na nichž závisí.

Nahoru Odpovědět
20.5.2019 14:13
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Odpovídá na Tomáš Novotný
Uživatel sítě :20.5.2019 16:23

Ano, pokud chápu správně jak to myslíš, tak každé sečtení se provede v rámci řádku.

Provedeš-li podobný SQL příkaz na tabulku o dvou řádcích bez definice řádku, tak výpis bude obsahovat 2 řádky.

Nahoru Odpovědět
20.5.2019 16:23
Chybami se člověk učí, běžte se učit jinam!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.