Autor | Zpráva | ||
---|---|---|---|
alfred Profil * |
#1 · Zasláno: 8. 2. 2014, 21:25:23
zdravím,
mám sloupeček boolean ve ktrém mám f nebo t a teď bych s tim potřeboval udělat něco jako tohle SELECT MAX (sloupecek) as pravda from tabulka; prostě aby se mi pokud ve výsledku bude true vypsal jenom jeden true a nebo jenom jeden false. děkuju. |
||
Alphard Profil |
#2 · Zasláno: 8. 2. 2014, 21:39:51
Lepší by bylo pracovat normálně s hodnotami 0 nebo 1. Potom by max() dělal přesně to, co chcete. :-)
Takto můžete do max vložit podmínku, if(sloupec='t',1,0) .
|
||
alfred Profil * |
#3 · Zasláno: 8. 2. 2014, 21:44:35
ano, ale když je postgres nemá? má prostě f nebo t.
|
||
Alphard Profil |
#4 · Zasláno: 8. 2. 2014, 21:49:23
Aha, nikde jste nezmínil, s čím pracujete. Na této diskusi vzhledem k počtu dotazů na MySQL automaticky předpokládáme MySQL. Příště zdůrazněte odlišnou databázi, jinak budete dostávat odpovědi na MySQL.
|
||
alfred Profil * |
#5 · Zasláno: 8. 2. 2014, 21:54:32 · Upravil/a: alfred
ah. moje chyba.
čili jde o problém v PostgreSQL |
||
Alphard Profil |
#6 · Zasláno: 8. 2. 2014, 22:24:31
Já Postgre bohužel moc neznám. Mělo by fungovat tohle, ale netvrdím, že neexistuje elegantnější řešení.
select max(sloupecek::int) from test; |
||
alfred Profil * |
#7 · Zasláno: 9. 2. 2014, 13:55:23
To prostě v postgres neexistuje náhrada za MAX pro string?? Alphard děkuju za řešení, ale fakt že to tohle asi nejelegantnější nebude. postgres má bejt přeci lepší než MySQL a připraví si pro mě takovou pakárnu?
|
||
Pavel Stěhule Profil * |
#8 · Zasláno: 9. 2. 2014, 16:51:47 · Upravil/a: Pavel Stěhule
alfred:
Protože postgres má pro bool rovnou specializované agregační funkce http://www.postgresql.org/docs/8.4/static/functions-aggregate.html - z Vašeho popisu není zřejmé, jestli chcete bool_or nebo bool_and. Počítat MAX nad booleanem je samozřejmě nesmysl. MAX z textu není problém: postgres=# select version(); version ────────────────────────────────────────────────────────────────────────────────────────────────────────── PostgreSQL 9.4devel on i686-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 32-bit (1 row) postgres=# select a::text from fo; a ─────── true false (2 rows) Time: 23.479 ms postgres=# select max(a::text) from fo; max ────── true (1 row) Time: 40.143 ms postgres=# select * from fo; a ─── t f (2 rows) |
||
alfred Profil * |
#9 · Zasláno: 10. 2. 2014, 01:05:38 · Upravil/a: Moderátor (editace znemožněna) 10. 2. 2014, 08:33:58
aha děkuji moc, ale zjistil jsem že potřebuju asi něco jinýho než jsem si myslel. můžete mi poradit, když mám tedy tuhle tabulku
sloucene_id | nick | datum_cas | vyzvednuto -------------+----------------+-------------------------+----------------------- 9 | komunikator | 2014-02-08 16:10:15 | t 9 | komunikator | 2014-02-08 15:48:28 | f 30 | br | 2013-12-30 08:53:12 | f 1 | jarda | 2013-12-29 13:48:36 | f 3 | hux | 2013-11-20 19:04:05 | f 5 | assoc | 2013-12-13 04:22:37 | f 29 | Dvacet | 2013-12-13 08:06:12 | f Moderátor Kajman: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
... která je výstupem jiného selektu, ale já potřebuju ty nicky mít jedinečný. chci aby když bude hodnota vyzvednuto true aby to byl jenom jeden řádek. neboli... potřebuju vlastně vědět jak se slučuje do skupin podle rozdílných hodnot. |
||
Kajman Profil |
#10 · Zasláno: 10. 2. 2014, 08:42:49
alfred:
„potřebuju vlastně vědět jak se slučuje do skupin podle rozdílných hodnot.“ V group by klauzuli je možné použít více sloupců. Pokud jste se zeptal špatně a opět potřebujete něco jiného, zkuste být konkrétnější a jednoznačnější, protože věta „chci aby když bude hodnota vyzvednuto true aby to byl jenom jeden řádek“ je pro náš těžko uchopitelná. Klidně nachystejte nějaká vzorová data na http://sqlfiddle.com, ukažte co už za dotaz máte, ukažte chtěný výsledek a napište v čem se liší od současného pokusu. |
||
alfred Profil * |
#11 · Zasláno: 10. 2. 2014, 16:54:41
Kajman :)
jednoznačně mám výše uvedenou tabulku ve které se mohou vyskytovat stejné nicky se stejným id jak je vidno na příkladu, ale rozdílné hodnoty ve sloupečku vyzvednuto. (t nebo f) a sloupeček vyzvednuto je pro mě teď stěžejní. pokud se stane že je tam nějaké id dvakrát tak tak jeden řádek potřebuju vymazat a ve sloupečku vyzvednuto musí být hodnota t. a nevim jak to mám udělat. group by jsem zkoušel snad ve sto dvaceti verzích. chci to chápat. |
||
Kajman Profil |
Takže hledáte něco jako toto?
SELECT DISTINCT ON (sloucene_id, nick) sloucene_id, nick, datum_cas, vyzvednuto FROM tabulka ORDER BY sloucene_id, nick, vyzvednuto DESC, datum_cas DESC |
||
alfred Profil * |
#13 · Zasláno: 11. 2. 2014, 14:52:09
Kajman
Ano! DISTINCT ON je to co jsem hledal. To přesně to. :) díky za pomoc. Už jsem to celé rozchodil. |
||
Časová prodleva: 10 let
|
0