SQL, wyświetlanie bez powtórzeń.

0

Witam. Mam tabelę, w której ID jest zawsze różne zaś nazwa czasem się powtarza. Chcę wyświetlić tylko 1 wpis z daną nazwą, ale jak to zrobić?

select distinct id_grupy, nazwa from grupy;

Wyświetla mi np:
1 ABC
2 ABC

A chciałbym żęby wyświetlił tylko 1 wpis:

1 ABC

Zapytanie select distinct nazwa from grupy; mnie nie satysfakcjonuje bo chcę to jedno ID.

0

DISTINCT działa tylko jeśli wszystkie komórki są takie same. jeśli Twój opis jest dokładny to daj LIMIT 1 i ewentualnie ASC lub DESC. Zaznaczam jest to odpowiedz tylko dla przypadku opisanego wyżej.

1
 SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa
0

Select distinct id_grupy, nazwa from grupy order by nazwa DESC limit 1

Tak może działać? Coś mi nie działa to zapytanie. I czy on wyświetli mi w takim razie różne nazwy? Np mam w bazie:

1 ABCD
2 ABCD
3 EFG
4 HIJ

po tym zapytaniu

1 ABCD
3 EFG
4 HIJ

0

poczytaj o "Group By".

0
SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa

Nie działa pisze not a GROUP BY expression

Dopiero

SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa, grupy_id

działa, ale to mnie nie satysfakcjonuje bo wyświetla wszystko.

1

Po 1. zapytanie napisane przeze mnie wyżej musi działać na 100%
Po 2. widać że chcąc pokazać o co Ci chodzi kombinujesz jak to zrobić żeby nie pokazać prawdziwych danych.
Po 3.

SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa, grupy_id

jest tworem z kosmosu, wdlg mnie.
Po 4. jeśli CHCESZ się tego NAUCZYĆ to patrz odpowiedz @TomRiddlee

Ad. 1. przez Ciebie, z nerwów, włączyłem swoją bazę i sprawdziłem czy nie dosięgneła mnie pomroczność jasna i czy nie wprowadziłem Cie w błąd. otóż nie, to zapytanie działa jak należy.
Ad. 2. Jeśli chcesz pomocy napisz jak wygląda baza danych (cała struktura tabeli) oraz 3 przykładowe wpisy

0

A no pokazać tabelę to nie problem:

create table grupy (
  id_grupy number(6,0) constraint grupy_pk primary key,
  nazwa varchar2(25),
  id_skoczka number(6,0) constraint g_skoczkowie_fk references skoczkowie(id_skoczka)
);
2

jak koń pod górkę...

SELECT Min(id_grupy), nazwa FROM grupy GROUP BY nazwa
0

@abrakadaber

Ad. 1. Owszem to działa z MySQLem. Nurtuje mnie jednak dlaczego mysql nie zalicza się do baz NORMALNYCH?
Ad. 2. W mojej podpowiedzi znalazło się distinct tylko dlatego ze skopiowałem zapytanie z postu wyzej i dodałem jedynie GBy na koncu. To zapytanie zwraca dane jakich oczekuje @olek1, działa również na postgresie (chyba ze ta baza również nie zalicza się do normalnych). Na oby wymienionych przeze mnie bazach to zapytanie działa poprawnie zarowno z distinct jak i bez (moje niedopatrzenie ze nie usunałem go po skopiowaniu).

1
alibabaaaa napisał(a):

@abrakadaber

Ad. 1. Owszem to działa z MySQLem. Nurtuje mnie jednak dlaczego mysql nie zalicza się do baz NORMALNYCH?

Ad. 2. W mojej podpowiedzi znalazło się distinct tylko dlatego ze skopiowałem zapytanie z postu wyzej i dodałem jedynie GBy na koncu. To zapytanie zwraca dane jakich oczekuje @olek1, działa również na postgresie (chyba ze ta baza również nie zalicza się do normalnych). Na oby wymienionych przeze mnie bazach to zapytanie działa poprawnie zarowno z distinct jak i bez (moje niedopatrzenie ze nie usunałem go po skopiowaniu).

Postgres 9.2
DDL:

CREATE TABLE grupy
(
  id_grupy serial NOT NULL,
  nazwa character varying(25),
  CONSTRAINT grupy_pkey PRIMARY KEY (id_grupy)
)

dane:

id nazwa
1 ABC
2 ABC
3 ABC
4 BBB
5 BBB
6 CCC
7 DDD
8 EEE
9 EEE

zapytanie 1

SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa
SELECT id_grupy, nazwa FROM grupy GROUP BY nazwa

wynik:

BŁĄD: kolumna "grupy.id_grupy" musi występować w klauzuli GROUP BY lub być użyta w funkcji agregującej
LINE 1: SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa
i taki komunikat wyświetla normalna baza. W normalnych bazach jeśli jest słowo group by to po nim MUSZĄ być WSZYSTKIE kolumny, które nie są w żaden sposób agregowane. MySQL jest bazą w sam raz pod kolejny CMS albo stronę - jako storage dla PHP. Jest w nim tyle udziwnień i odstępstw od standardu, że nic tylko siąść i płakać.

zapytanie 2

SELECT DISTINCT id_grupy, nazwa FROM grupy GROUP BY nazwa, id_grupy

wynik:

id nazwa
1 ABC
2 ABC
3 ABC
4 BBB
5 BBB
6 CCC
7 DDD
8 EEE
9 EEE
czyli trochę nie bardzo

zapytanie 2

SELECT MIN(id_grupy), nazwa FROM grupy GROUP BY nazwa

wynik:

id nazwa
1 ABC
4 BBB
6 CCC
7 DDD
8 EEE
Czyli to co miało być. Zamiast Min może być Max, Sum, ...
0

Usuń z zapytania id_grupy

1 użytkowników online, w tym zalogowanych: 0, gości: 1