Autor Zpráva
alfred
Profil *
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
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 *
ano, ale když je postgres nemá? má prostě f nebo t.
Alphard
Profil
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 *
ah. moje chyba.


čili jde o problém v PostgreSQL
Alphard
Profil
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 *
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 *
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 *
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
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 *
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 *
Kajman
Ano! DISTINCT ON je to co jsem hledal. To přesně to. :) díky za pomoc. Už jsem to celé rozchodil.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0