Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
discount 30 + hiring
Avatar
Martin
Člen
Avatar
Martin:14.12.2020 17:46

Zdravím, mám následující select:

SELECT t.debtor_account, COUNT(t.debtor_account)
FROM transaction t
GROUP BY t.debtor_account
HAVING COUNT(t.debtor_account) > 2;

který mi funguje, ale já bych potřeboval selectnout všechno, čili *, když to ale zkusím, začne to na mě řvát
column "t.account_fk" must appear in the GROUP BY clause or be used in an aggregate function
Má někdo nápad, jak to předělat, aby select fungoval stejně jako tento dotaz, ale selectovalo všechno ? Díky... :)

Mimochodem, struktura tabulky viz. obrázek.

Editováno 14.12.2020 17:47
 
Odpovědět
14.12.2020 17:46
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.12.2020 19:08

Jaky je tvuj chybny kod sql dotazu?
Ja bych zkusil vypsat vsechny sloupce, jejich nazvy misto nevhodne hvezdicky, ktera se ani nedoporucuje pouzivat, protoze ti zbytek programu na tom muze zkapat, kdyz pocita se 6 sloupci a najednou dostane 7, protoze kedo pridal sloupec do db. Nebo pripojit tu tabulku pomoci LEFT JOIN jeste jednou. Nebo udelat nad tim jeste jeden select a pripojit left joinem dalsi sloupce.

google = sql Postgres select all group by having
https://stackoverflow.com/…eater-than-1

SELECT *
FROM product_price_info
WHERE name IN (SELECT name
               FROM product_price_info
               GROUP BY name HAVING COUNT(*) > 1)

SELECT no, name, price, "date"
FROM (
  SELECT no, name, price, "date",
         COUNT(*) OVER (PARTITION BY name) AS cnt
  FROM product_price_info ) AS t
WHERE t.cnt > 1

WITH report AS (
  SELECT p.*, count(*) OVER (PARTITION BY name) as count FROM product p
)
SELECT * FROM report WHERE count > 1;

select t1.*
from tablename t1
join (select name from tablename group by name having count(*) > 1) t2
  on t1.name = t2.name
Editováno 14.12.2020 19:10
 
Nahoru Odpovědět
14.12.2020 19:08
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petan
Člen
Avatar
Odpovídá na Martin
Petan:15.12.2020 17:15

Ahoj
Co chceš aby byl výsledek ?

SELECT *,COUNT(neco)
FROM table
GROUP BY *
HAVING COUNT(neco) > 1;

může maximálně vypsat řádky které jsou duplikované, ovšem v tvé tabulce díky [pk] serial stejně nemůžou byt.

 
Nahoru Odpovědět
15.12.2020 17:15
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 3 zpráv z 3.