Pak problemi - DISTINCT usage
8 отговора
290 прегледа
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 пак получавам повтарящи се бири и водки.
Някой има ли идея как става това ,което искам да направа??
| ID |Type |
--------- |-------
| 123 |bira
| 124 |vodka
| 125 |rakiq
| 126 |bira
| 127 |vodka
-------------------|
да получа редовете бира,водка и ракия(няма значение кои важното е да не се повтарят).Трябва ми нещо като 'SELECT * from tabliza1 WHERE Type IN (bira,vodka)' , но в резултата да нямам повтарящи се Type-ове.
Проблема ми е че не мога да групирам и да селектвам всичко,а ако използвам
DISTINCT пак получавам повтарящи се бири и водки.
Някой има ли идея как става това ,което искам да направа??
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 ! :-)
Светът е малък нека си помагаме.
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 ! :-)
Светът е малък нека си помагаме.
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?
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?
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
е НЕСТАНДАРТНО и резултатът е неопределен в смисъл, че за колонките които не са в 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
Re: пиши на български моля те
Да ясно ,че ще е така ,но на мен точно това ми трябва - искам просто да има по един представител от всички - само че да се сдобия и с останалите му колони,без значение че един път са едни,друг път дуги,има ли начин не само да отсея по Тип ,но да взема и всички колони с някакво куери?
може би
Здрасти
разбрах какво си има в предвиди с Distinct определено няма да стане. Пробвай с вложен SELECT
SELECT
MIN("ID"),
"Type"
FROM tablitza1
Where
"ID" = (SELECT DISTINCT "type" From Tablitza1)
нещо такова. (Пиша го на Prima Vista тоест без да съм го тестжал където и да е), но това нещо би трябвало да ти върне всички различни типове с най-малко ID или с други думи всяко първо срещане от тип
Успех
Светът е малък нека си помагаме.
разбрах какво си има в предвиди с Distinct определено няма да стане. Пробвай с вложен SELECT
SELECT
MIN("ID"),
"Type"
FROM tablitza1
Where
"ID" = (SELECT DISTINCT "type" From Tablitza1)
нещо такова. (Пиша го на Prima Vista тоест без да съм го тестжал където и да е), но това нещо би трябвало да ти върне всички различни типове с най-малко ID или с други думи всяко първо срещане от тип
Успех
Светът е малък нека си помагаме.
Re: пиши на български моля те
Ако "останалите му колони" означава само "ID", ще ти свърши работа нещо такова:
Ако имаш и други колони обаче... тцъ.
А, сетих се!
ама не знам дали ще работи навсякъде... На Interbase работи.
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 на
Re: може би
Аз не твърдя, че съм голям специалист, ама нямаше ли нещо такова, че агрегатните функции вървят само с "group by"?
Това не е ли малко нелогично (пак казвам, че не съм много навътре):
Where
"ID" = (SELECT DISTINCT "type" From Tablitza1)
как така сравняваш ID - число с множество от "type" - низове?
Това не е ли малко нелогично (пак казвам, че не съм много навътре):
Where
"ID" = (SELECT DISTINCT "type" From Tablitza1)
как така сравняваш ID - число с множество от "type" - низове?
Re: пиши на български моля те
Ааа работи си идеално,мерсииии много на всички.Това последното ми върши префектна работа.