Pak problemi - DISTINCT usage

8 отговора 290 прегледа
#1

Pak problemi - DISTINCT usage

Опитвам се да направя заявка която да взима всичко от една таблица,но от едно поле да взема различните стойности,т.е ако има таблица:
| ID |Type |
--------- |-------
| 123 |bira
| 124 |vodka
| 125 |rakiq
| 126 |bira
| 127 |vodka
-------------------|
да получа редовете бира,водка и ракия(няма значение кои важното е да не се повтарят).Трябва ми нещо като 'SELECT * from tabliza1 WHERE Type IN (bira,vodka)' , но в резултата да нямам повтарящи се Type-ове.
Проблема ми е че не мога да групирам и да селектвам всичко,а ако използвам
DISTINCT пак получавам повтарящи се бири и водки.
Някой има ли идея как става това ,което искам да направа??

Отговор
в отговор на detyo #2

Re: Pak problemi - DISTINCT usage

Zdrasti

neznam kakyv syrvyr polzva6, no tova bi trqbvalo da raboti:

Select DISTINCT
TYPE
From Tablitza1

tova e dostaty4no da ti vyrne vsi4ki vidove "alkohol" :) bez povtorenie
a:

Select DISTINCT
TYPE
From Tablitza1
Where
Type = 'bira'

ili vry6ta 1 rezultat ili null

Probvai ! :-)

Светът е малък нека си помагаме.
Отговор
в отговор на Vermax #3

Re: Pak problemi - DISTINCT usage

Zdravej,
Blagodarq 4e se opita da mi pomogne6,parvata zaqvka koqto mi pepora4a
e dobra,no az iskam vsi4ki koloni,ne samo Type,zna4i na mySQL kato napi6a:
'Select * from tabliza1 where Type in ( bira,vodka) group by Type' mi vra6ta
to4no kakvoto mi trqbva,t.e vsi4ki redove s nepovtarq6ti se Typo-ve,
tova gornoto query ne varvi na MS SQL oba4e, i az se opitvam da namerq drugo re6enie .Ideatq e da vzema vsi4ki koloni i samo DISTINCT type - primerno vzema parviq red s type='bira' i vsi4ki sledva6ti gi propuska,taka i za ostanalite vidove alkoholi.Ima li na4in da namerq parvo vsi4ki tipove alkoholi i posle a ima vzema vsi
4ki ostanali koloni,kato ne se valnuvam dali sa na paravata bira ili na 2-ta - prosto nqkoq?

Отговор
в отговор на detyo #4

Re: пиши на български моля те

Select * from tabliza1 where Type in ( bira,vodka) group by Type;

е НЕСТАНДАРТНО и резултатът е неопределен в смисъл, че за колонките които не са в GROUP BY стойностите са от произволенен ред (за съответната стойност на Type)

т.е. резултатът може веднъж да е

| 123 |bira
| 124 |vodka
| 125 |rakiq

а друг път
| 124 |vodka
| 125 |rakiq
| 126 |bira

а трети

| 123 |bira
| 125 |rakiq
| 127 |vodka

salle.online.bg/sig
Отговор
в отговор на salle #5

Re: пиши на български моля те

Да ясно ,че ще е така ,но на мен точно това ми трябва - искам просто да има по един представител от всички - само че да се сдобия и с останалите му колони,без значение че един път са едни,друг път дуги,има ли начин не само да отсея по Тип ,но да взема и всички колони с някакво куери?

Отговор
в отговор на detyo #6

може би

Здрасти

разбрах какво си има в предвиди с Distinct определено няма да стане. Пробвай с вложен SELECT

SELECT
MIN("ID"),
"Type"
FROM tablitza1
Where
"ID" = (SELECT DISTINCT "type" From Tablitza1)

нещо такова. (Пиша го на Prima Vista тоест без да съм го тестжал където и да е), но това нещо би трябвало да ти върне всички различни типове с най-малко ID или с други думи всяко първо срещане от тип

Успех

Светът е малък нека си помагаме.
Отговор
в отговор на detyo #7

Re: пиши на български моля те

Ако "останалите му колони" означава само "ID", ще ти свърши работа нещо такова:
select type, min(id) from table1

group by type
having count(*) > 1

Ако имаш и други колони обаче... тцъ.

А, сетих се!
select * from table1 where id in 

(select min(id) from table1
group by type
having count(*) > 1)


ама не знам дали ще работи навсякъде... На Interbase работи.

Редактирано от Formal на

Отговор
в отговор на Vermax #8

Re: може би

Аз не твърдя, че съм голям специалист, ама нямаше ли нещо такова, че агрегатните функции вървят само с "group by"?

Това не е ли малко нелогично (пак казвам, че не съм много навътре):
Where
"ID" = (SELECT DISTINCT "type" From Tablitza1)

как така сравняваш ID - число с множество от "type" - низове?

Отговор
в отговор на Formal #9

Re: пиши на български моля те

Ааа работи си идеално,мерсииии много на всички.Това последното ми върши префектна работа.

Отговор