|
| MySQL og Count Fra : Harald |
Dato : 13-03-05 02:44 |
|
Bruger MySQL
Har følgende tabeller:
tabel1
IDKode : integer
Navn : String
tabel2
Ejer : integer
Dato : Date
Ejer i tabel2 henviser til IDKode i tabel1, der kan således være flere
poster i tabel2 som er ejet af tabel1.
SELECT * FROM tabel2
LEFT JOIN tabel1 ON tabel2.ejer=tabel1.IDKode WHERE tabel2.Dato=en_dato
det virker fint, men jeg vil så gerne have en count af hvor mange poster af
tabel2 der hører til posten i tabel1
/HK
| |
Jens Koldbæk (13-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 13-03-05 17:53 |
|
Du kan skrive det sådan:
SELECT COUNT(*) FROM tabel2
WHERE ejer =
(SELECT ejer FROM tabel2
LEFT JOIN tabel1 ON
tabel2.ejer=tabel1.IDKode WHERE
tabel2.Dato=en_dato)
Mvh
Jens
Harald <nomail@noname.dk> skrev:
>Bruger MySQL
>
>Har følgende tabeller:
>
>tabel1
>IDKode : integer
>Navn : String
>
>tabel2
>Ejer : integer
>Dato : Date
>
>Ejer i tabel2 henviser til IDKode i
>tabel1, der kan således være flere
>poster i tabel2 som er ejet af tabel1.
>
>SELECT * FROM tabel2
>LEFT JOIN tabel1 ON
>tabel2.ejer=tabel1.IDKode WHERE
>tabel2.Dato=en_dato
>
>det virker fint, men jeg vil så gerne
>have en count af hvor mange poster af
>tabel2 der hører til posten i tabel1
>
>/HK
| |
Harald (13-03-2005)
| Kommentar Fra : Harald |
Dato : 13-03-05 20:50 |
|
"Jens Koldbæk (slet AZTAI)" <koldbaek@AZTAImail.dk> skrev i en meddelelse
news:11107329560.663766443030458@dtext.news.tele.dk...
> Du kan skrive det sådan:
>
> SELECT COUNT(*) FROM tabel2
> WHERE ejer =
> (SELECT ejer FROM tabel2
> LEFT JOIN tabel1 ON
> tabel2.ejer=tabel1.IDKode WHERE
> tabel2.Dato=en_dato)
Jeg får en ERROR 1064 - error in your SQL syntax, har ikke lige kunne finde
ud af hvor i SQL´en.
Jeg bruger MySQL 4.0.17
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 10:03 |
|
Prøv dette:
SELECT COUNT(*) FROM tabel2 t2
WHERE t2.ejer =
(SELECT t22.ejer FROM tabel2 t22
LEFT JOIN tabel1 t1 ON
t22.ejer=t1.IDKode WHERE
t22.Dato=en_dato)
Mvh
Jens
| |
Peter Brodersen (14-03-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 14-03-05 10:05 |
|
On 14 Mar 2005 09:03:20 GMT, Jens Koldbæk <koldbaek@N6W26mail.dk>
(slet N6W26) wrote:
>Prøv dette:
MySQL 4.0.17 understøtter ikke subqueries.
--
- Peter Brodersen
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 10:13 |
|
"Peter Brodersen" <usenet2005@ter.dk> skrev i en meddelelse
news:d13k4n$80n$1@news.klen.dk...
> On 14 Mar 2005 09:03:20 GMT, Jens Koldbæk <koldbaek@N6W26mail.dk>
> (slet N6W26) wrote:
>
>>Prøv dette:
>
> MySQL 4.0.17 understøtter ikke subqueries.
Og jeg få også samme fejl (ERROR 1064)
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 10:25 |
|
Denne sql understøttes forhåbentligt:
SELECT COUNT(*)
FROM tabel2 t21,
tabel1 t1,
tabel2 t22
WHERE t21.Dato = en_dato
AND t1.IDKode = t21.ejer
AND t22.ejer = t1.IDKode
Mvh
Jens
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 11:25 |
|
"Jens Koldbæk (slet GS0JN)" <koldbaek@GS0JNmail.dk> skrev i en meddelelse
news:11107924830.91565309843218@dtext.news.tele.dk...
> Denne sql understøttes forhåbentligt:
>
> SELECT COUNT(*)
> FROM tabel2 t21,
> tabel1 t1,
> tabel2 t22
> WHERE t21.Dato = en_dato
> AND t1.IDKode = t21.ejer
> AND t22.ejer = t1.IDKode
Den giver ikke en fejl, men jeg har vist ikke forklaret mig ordentlig så her
kommer det igen:
Bruger MySQL 4.0.17
Har følgende tabeller (forkortet):
kunder:
IDKode : integer
Navn : String
linier
Ejer : integer
Dato : Date
Tekst : string
Ejer i linier henviser til IDKode i kunder, der kan således være flere
poster i linier som er ejet af kunder.
SELECT * FROM linier
LEFT JOIN kunder ON linier.ejer=kunder.IDKode WHERE linier.Dato=en_dato
Hvis f.eks. en kunde har IDKode=10 og 2 poster i linier har Ejer=10 så giver
det mig 2 poster med alle felter fra både kunder og linier. Jeg vil fortsat
have alle felter i begge tabeller men ud over det vil jeg også have en Count
felt i hver post der fortæller hvor man linier hver kunde har.
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 11:43 |
|
SELECT t1.IDKode,
t1.Navn,
t21.Ejer,
t21.Dato,
t21.Tekst,
COUNT(t22.ejer)
FROM tabel2 t21,
tabel1 t1,
tabel2 t22
WHERE t21.Dato = en_dato
AND t1.IDKode = t21.ejer
AND t22.ejer = t1.IDKode
Group by t1.IDKode,t1.Navn,t21.Ejer,t21.Dato,t21.Tekst
Mvh
jens
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 12:14 |
|
"Jens Koldbæk" <koldbaek@mail.dk> skrev i en meddelelse
news:11107971560.0086618679208712@dtext.news.tele.dk...
>
> SELECT t1.IDKode,
> t1.Navn,
> t21.Ejer,
> t21.Dato,
> t21.Tekst,
> COUNT(t22.ejer)
> FROM tabel2 t21,
> tabel1 t1,
> tabel2 t22
> WHERE t21.Dato = en_dato
> AND t1.IDKode = t21.ejer
> AND t22.ejer = t1.IDKode
> Group by t1.IDKode,t1.Navn,t21.Ejer,t21.Dato,t21.Tekst
Giver ingen fejl men det ser ud til at den Count jeg får er alle linier
tilhørende en kunde, dvs. at hvis jeg kører SQL´en med en_dato="20050313" og
kunden har 1 linie den dag men også 2 andre linier på andre datoer så bliver
count=3 og den burde kun være 1.
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 12:50 |
|
Harald <nomail@noname.dk> skrev:
> men ud over det vil jeg også have en Count
> felt i hver post der fortæller hvor man linier hver kunde har.
Du vil altså istedet have en count i hver post, der fortæller hvor
mange linier kunden har på den pågældende dato?
Så er det jo bare:
SELECT t1.IDKode,
t1.Navn,
t2.Ejer,
t2.Tekst,
COUNT(t2.Dato)
FROM tabel2 t2,
tabel1 t1
WHERE t2.Dato = en_dato
AND t1.IDKode = t2.ejer
Group by t1.IDKode,t1.Navn,t2.Ejer,t2.Tekst
Mvh
Jens
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 13:12 |
|
"Jens Koldbæk (slet IGW86)" <koldbaek@IGW86mail.dk> skrev i en meddelelse
news:11108011560.440346000606485@dtext.news.tele.dk...
> Harald <nomail@noname.dk> skrev:
>> men ud over det vil jeg også have en Count
>> felt i hver post der fortæller hvor man linier hver kunde har.
>
> Du vil altså istedet have en count i hver post, der fortæller hvor
> mange linier kunden har på den pågældende dato?
>
> Så er det jo bare:
>
> SELECT t1.IDKode,
> t1.Navn,
> t2.Ejer,
> t2.Tekst,
> COUNT(t2.Dato)
> FROM tabel2 t2,
> tabel1 t1
> WHERE t2.Dato = en_dato
> AND t1.IDKode = t2.ejer
> Group by t1.IDKode,t1.Navn,t2.Ejer,t2.Tekst
Virker perfekt med count nu, men jeg får stadig kun en post for hver kunde
selvom kunden har flere linier på samme dato
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 13:25 |
|
Harald <nomail@noname.dk> skrev:
>Virker perfekt med count nu, men jeg
>får stadig kun en post for hver kunde
>selvom kunden har flere linier på samme dato
>
Øh? - I give it a final try:
SELECT t1.IDKode,
t1.Navn,
t21.Ejer,
t21.Dato,
t21.Tekst,
COUNT(t22.ejer)
FROM tabel2 t21,
tabel1 t1,
tabel2 t22
WHERE t21.Dato = en_dato
AND t1.IDKode = t21.ejer
AND t22.ejer = t1.IDKode
AND t22.Dato = t21.Dato
Group by t1.IDKode,t1.Navn,t21.Ejer,t21.Dato,t21.Tekst
Mvh
Jens
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 14:08 |
|
"Jens Koldbæk" <koldbaek@mail.dk> skrev i en meddelelse
news:11108033060.273642963428141@dtext.news.tele.dk...
> Harald <nomail@noname.dk> skrev:
>>Virker perfekt med count nu, men jeg
>>får stadig kun en post for hver kunde
>>selvom kunden har flere linier på samme dato
>>
>
> Øh? - I give it a final try:
>
> SELECT t1.IDKode,
> t1.Navn,
> t21.Ejer,
> t21.Dato,
> t21.Tekst,
> COUNT(t22.ejer)
> FROM tabel2 t21,
> tabel1 t1,
> tabel2 t22
> WHERE t21.Dato = en_dato
> AND t1.IDKode = t21.ejer
> AND t22.ejer = t1.IDKode
> AND t22.Dato = t21.Dato
> Group by t1.IDKode,t1.Navn,t21.Ejer,t21.Dato,t21.Tekst
Nej får stadig kun een post selvom der er flere linier og nu giver count
også et for højt antal i nogle tilfælde. Nå det kan være jeg bliver nød til
at lave det manuelt men det havde jo været lettere at gøre det i en enkelt
SQL og hurtigere.
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 14:20 |
|
Ja, det er jo lige med at forstå hvad du vil have; prøv at fjerne
linien
"Group by ..."
Mvh
Jens
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 15:50 |
|
"Jens Koldbæk" <koldbaek@mail.dk> skrev i en meddelelse
news:11108065710.165406228629895@dtext.news.tele.dk...
> Ja, det er jo lige med at forstå hvad du vil have; prøv at fjerne
> linien
Det giver fejlen: [root@localhost:3306] ERROR 1140: Mixing of GROUP columns
(MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no
GROUP BY clause
Her er så en forklaring med et data eks.
Igen mine tabeller i MySQL 4.0.17:
kunder:
IDKode : integer
Navn : String
linier
Ejer : integer
Dato : Date
Tekst : string
kunder indeholder så f.eks.:
IDKode, Navn
10, Hans
12, Peter
18, John
33, Hanne
linier indeholder så f.eks.:
Ejer, Dato, Tekst
10, 20050310, træsko
10, 20050312, cykel
10, 20050312, bus
10, 20050314, hund
12, 20050310, hus
12, 20050312, bil
18, 20050314, dør
33, 20050312, skærm
33, 20050312, mus
33, 20050312, cykel
33, 20050314, tastatur
SQL´en der køres med datoen=20050312 skal så retunerer følgende felter (ikke
nødvendigvis i nævnte rækkefølge)
IDKode, Navn, Ejer, Dato, Tekst, Count
10, Hans, 10, 20050312, cykel, 2
10, Hans, 10, 20050312, bus, 2
12, Peter, 12, 20050312, bil, 1
33, Hanne, 33, 20050312, skærm, 3
33, Hanne, 33, 20050312, mus, 3
33, Hanne, 33, 20050312, cykel, 3
Den SQL jeg bruger nu:
SELECT * FROM linier
LEFT JOIN kunder ON linier.ejer=kunder.IDKode WHERE linier.Dato="20050312"
vil give mig det resultat bortset fra feltet Count
/HK
| |
Jens Koldbæk (14-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 14-03-05 22:58 |
|
OK, her har du den så:
SELECT t1.IDCode,
t1.navn,
t2.ejer,
t2.tekst,
t2.dato,
count(t3.dato)
FROM kunder t1,
linier t2,
linier t3
WHERE t2.dato = 'EN_DATO' -- konvertér venligst selv til en date:)
AND t1.IDCode = t2.ejer
AND t3.ejer = t2.ejer
AND t3.dato = t2.dato
group by t1.IDCode, t1.navn, t2.ejer, t2.tekst, t2.dato
Mvh
Jens
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 23:53 |
|
"Jens Koldbæk (slet FTKSR)" <koldbaek@FTKSRmail.dk> skrev i en meddelelse
news:11108376820.582740649193202@dtext.news.tele.dk...
> OK, her har du den så:
>
> SELECT t1.IDCode,
> t1.navn,
> t2.ejer,
> t2.tekst,
> t2.dato,
> count(t3.dato)
> FROM kunder t1,
> linier t2,
> linier t3
> WHERE t2.dato = 'EN_DATO' -- konvertér venligst selv til en date:)
> AND t1.IDCode = t2.ejer
> AND t3.ejer = t2.ejer
> AND t3.dato = t2.dato
> group by t1.IDCode, t1.navn, t2.ejer, t2.tekst, t2.dato
Næ det virker stadig ikke, count er helt forkert ved nogle poster og ved
nogle poster er count forskellig selv om kunder er den samme. Og hvis jeg
f.eks. helt fjerner linier.tekst feltet fra hele sql sætningen så får jeg et
helt andet resultat, og hvad har tekst feltet overhoved med resultatet at
gøre.
Det er som om at resultatet er afhængig af hvad linier.tekst indeholder for
hvis jeg retter på tekst feltet i en post så ændre resultatet sig.
/HK
| |
Jens Koldbæk (15-03-2005)
| Kommentar Fra : Jens Koldbæk |
Dato : 15-03-05 01:05 |
|
>Næ det virker stadig ikke, count er
>helt forkert ved nogle poster og ved
>nogle poster er count forskellig selv
>om kunder er den samme. Og hvis jeg
>f.eks. helt fjerner linier.tekst
>feltet fra hele sql sætningen så får jeg et
>helt andet resultat, og hvad har tekst
>feltet overhoved med resultatet at
>gøre.
>Det er som om at resultatet er
>afhængig af hvad linier.tekst
>indeholder for
>hvis jeg retter på tekst feltet i en
>post så ændre resultatet sig.
>
OK - så er der et andet indhold i dine tabeller end i din
beskrivelse fra tidligere:
> kunder indeholder så f.eks.:
> IDKode, Navn
> 10, Hans
> 12, Peter
> 18, John
> 33, Hanne
>
> linier indeholder så f.eks.:
> Ejer, Dato, Tekst
> 10, 20050310, træsko
> 10, 20050312, cykel
> 10, 20050312, bus
> 10, 20050314, hund
> 12, 20050310, hus
> 12, 20050312, bil
> 18, 20050314, dør
> 33, 20050312, skærm
> 33, 20050312, mus
> 33, 20050312, cykel
> 33, 20050314, tastatur
for min select:
SELECT t1.IDCode,
t1.navn,
t2.ejer,
t2.tekst,
t2.dato,
count(t3.dato)
FROM kunder t1,
linier t2,
linier t3
WHERE t2.dato = ´20050312´ -- konvertér venligst selv
AND t1.IDCode = t2.ejer
AND t3.ejer = t2.ejer
AND t3.dato = t2.dato
group by t1.IDCode, t1.navn, t2.ejer, t2.tekst, t2.dato
giver netop hvad du ønskede - ud fra de data du beskrev, nemlig:
IDKode, Navn, Ejer, Dato, Tekst, Count
10, Hans, 10, 20050312, cykel, 2
10, Hans, 10, 20050312, bus, 2
12, Peter, 12, 20050312, bil, 1
33, Hanne, 33, 20050312, skærm, 3
33, Hanne, 33, 20050312, mus, 3
33, Hanne, 33, 20050312, cykel, 3
> og hvad har tekstfeltet overhovedet med resultatet at gøre
Ja selvfølgelig, hvis du vil have "tekst"-feltet med i selecten,
som du optæller forekomsterne på, så bliver antallet af poster
hvor tekstfeltet er ens naturligvis optalt!!!!
Hvis du ikke vil optælle antallet af poster hvor tekstfeltet er
ens skal du naturligvis ikke medtage dette felt.
| |
Kristian Damm Jensen (13-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 13-03-05 22:19 |
|
Harald wrote:
> Bruger MySQL
>
> Har følgende tabeller:
>
> tabel1
> IDKode : integer
> Navn : String
>
> tabel2
> Ejer : integer
> Dato : Date
>
> Ejer i tabel2 henviser til IDKode i tabel1, der kan således være
flere
> poster i tabel2 som er ejet af tabel1.
>
> SELECT * FROM tabel2
> LEFT JOIN tabel1 ON tabel2.ejer=tabel1.IDKode WHERE
tabel2.Dato=en_dato
>
> det virker fint, men jeg vil så gerne have en count af hvor mange
poster af
> tabel2 der hører til posten i tabel1
Prøv med
select tabel1.IDKode, count(tabel1.ejer)
from tabel1
left join tabel2
on tabel1.IDKode = tabel2.ejer
group by tabel1.IDKode
(Hvor svært kan det være )
VH
Kristian
| |
Harald (13-03-2005)
| Kommentar Fra : Harald |
Dato : 13-03-05 22:34 |
|
"Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
news:1110748729.315310.284890@l41g2000cwc.googlegroups.com...
Harald wrote:
>> Bruger MySQL
>
> Har følgende tabeller:
>
> tabel1
> IDKode : integer
> Navn : String
>
> tabel2
> Ejer : integer
> Dato : Date
>
> Ejer i tabel2 henviser til IDKode i tabel1, der kan således være
flere
> poster i tabel2 som er ejet af tabel1.
>
> SELECT * FROM tabel2
> LEFT JOIN tabel1 ON tabel2.ejer=tabel1.IDKode WHERE
tabel2.Dato=en_dato
>
> det virker fint, men jeg vil så gerne have en count af hvor mange
poster af
> tabel2 der hører til posten i tabel1
>Prøv med
>select tabel1.IDKode, count(tabel2.ejer)
>from tabel1
>left join tabel2
> on tabel1.IDKode = tabel2.ejer
>group by tabel1.IDKode
Det virker næsten, hvis f.eks. der er 3 poster i tabel2 som hører til en
bestemt post i tabel1 så skulle jeg gerne få 3 poster ud hvor count så er
sat til 3 i hver post. Med dit forslag får jeg kun en post tilbage.
/HK
| |
Kristian Damm Jensen (14-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 14-03-05 07:34 |
|
Harald wrote:
> "Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
> news:1110748729.315310.284890@l41g2000cwc.googlegroups.com...
>
> Harald wrote:
> >> Bruger MySQL
> >
> > Har følgende tabeller:
> >
> > tabel1
> > IDKode : integer
> > Navn : String
> >
> > tabel2
> > Ejer : integer
> > Dato : Date
> >
> > Ejer i tabel2 henviser til IDKode i tabel1, der kan således være
> flere
> > poster i tabel2 som er ejet af tabel1.
> >
> > SELECT * FROM tabel2
> > LEFT JOIN tabel1 ON tabel2.ejer=tabel1.IDKode WHERE
> tabel2.Dato=en_dato
> >
> > det virker fint, men jeg vil så gerne have en count af hvor mange
> poster af
> > tabel2 der hører til posten i tabel1
>
>
> >Prøv med
>
> >select tabel1.IDKode, count(tabel2.ejer)
> >from tabel1
> >left join tabel2
> > on tabel1.IDKode = tabel2.ejer
> >group by tabel1.IDKode
>
> Det virker næsten, hvis f.eks. der er 3 poster i tabel2 som hører
til en
> bestemt post i tabel1 så skulle jeg gerne få 3 poster ud hvor count
så er
> sat til 3 i hver post. Med dit forslag får jeg kun en post tilbage.
Det lyder som om MySQL laver en count(distinct tabel2.ejer) from for en
count(tabel2.ejer). Det er i så fald en fejl i MySQL.
Prøv at bruge count(distinct tabel2.dato) i stedet.
Kristian
| |
Harald (14-03-2005)
| Kommentar Fra : Harald |
Dato : 14-03-05 09:47 |
|
"Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
news:1110782028.577245.18890@l41g2000cwc.googlegroups.com...
Harald wrote:
> "Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
> news:1110748729.315310.284890@l41g2000cwc.googlegroups.com...
>
> Harald wrote:
> >> Bruger MySQL
> >
> > Har følgende tabeller:
> >
> > tabel1
> > IDKode : integer
> > Navn : String
> >
> > tabel2
> > Ejer : integer
> > Dato : Date
> >
> > Ejer i tabel2 henviser til IDKode i tabel1, der kan således være
> flere
> > poster i tabel2 som er ejet af tabel1.
> >
> > SELECT * FROM tabel2
> > LEFT JOIN tabel1 ON tabel2.ejer=tabel1.IDKode WHERE
> tabel2.Dato=en_dato
> >
> > det virker fint, men jeg vil så gerne have en count af hvor mange
> poster af
> > tabel2 der hører til posten i tabel1
>
>
> >Prøv med
>
> >select tabel1.IDKode, count(tabel2.ejer)
> >from tabel1
> >left join tabel2
> > on tabel1.IDKode = tabel2.ejer
> >group by tabel1.IDKode
>
> Det virker næsten, hvis f.eks. der er 3 poster i tabel2 som hører
til en
> bestemt post i tabel1 så skulle jeg gerne få 3 poster ud hvor count
så er
> sat til 3 i hver post. Med dit forslag får jeg kun en post tilbage.
>Det lyder som om MySQL laver en count(distinct tabel2.ejer) from for en
>count(tabel2.ejer). Det er i så fald en fejl i MySQL.
>Prøv at bruge count(distinct tabel2.dato) i stedet.
Jeg får stadig kun 1 post tilbage selv om der er flere i tabel2, men nu er
count 1 uanset hvad.
/HK
| |
Peter Brodersen (14-03-2005)
| Kommentar Fra : Peter Brodersen |
Dato : 14-03-05 10:06 |
|
On 13 Mar 2005 22:33:48 -0800, "Kristian Damm Jensen"
<kristiandamm@gmail.com> wrote:
>Det lyder som om MySQL laver en count(distinct tabel2.ejer) from for en
>count(tabel2.ejer). Det er i så fald en fejl i MySQL.
MySQL differencierer nu på COUNT(felt) og COUNT(DISTINCT felt).
--
- Peter Brodersen
| |
Kristian Damm Jensen (15-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 15-03-05 12:22 |
|
Harald wrote:
<snip>
> SQL´en der køres med datoen=20050312 skal så retunerer følgende
felter (ikke
> nødvendigvis i nævnte rækkefølge)
>
> IDKode, Navn, Ejer, Dato, Tekst, Count
> 10, Hans, 10, 20050312, cykel, 2
> 10, Hans, 10, 20050312, bus, 2
> 12, Peter, 12, 20050312, bil, 1
> 33, Hanne, 33, 20050312, skærm, 3
> 33, Hanne, 33, 20050312, mus, 3
> 33, Hanne, 33, 20050312, cykel, 3
Du vil altså i hver linie have det samlede antal poster for den
pågældende kunde. Hvis Hanne havde en post mere i linie skulle der
således returneres
33, Hanne, 33, 20050312, skærm, 4
33, Hanne, 33, 20050312, mus, 4
33, Hanne, 33, 20050312, cykel, 4
33, Hanne, 33, 20050312, buskort, 4
Er det korrekt opfattet?
Det kan i princippet godt lade sig gøre, men det er at blande pærer
og bananer sammen. Informationen om at Hanne har fire forekomster er
ikke relateret til den enkelte post i udtrækket, men hænger sammen
med alle de andre poster.
Jeg ville foreslå, at du i stedet laver to udtræk: Et der fortæller,
hvor mange poster hver enkelt har, og et der giver dig indholdet i de
pågældende poster.
VH
Kristian
| |
Harald (15-03-2005)
| Kommentar Fra : Harald |
Dato : 15-03-05 16:44 |
|
"Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
news:1110885717.481250.42560@o13g2000cwo.googlegroups.com...
Harald wrote:
<snip>
> SQL´en der køres med datoen=20050312 skal så retunerer følgende
felter (ikke
> nødvendigvis i nævnte rækkefølge)
>
> IDKode, Navn, Ejer, Dato, Tekst, Count
> 10, Hans, 10, 20050312, cykel, 2
> 10, Hans, 10, 20050312, bus, 2
> 12, Peter, 12, 20050312, bil, 1
> 33, Hanne, 33, 20050312, skærm, 3
> 33, Hanne, 33, 20050312, mus, 3
> 33, Hanne, 33, 20050312, cykel, 3
Du vil altså i hver linie have det samlede antal poster for den
pågældende kunde. Hvis Hanne havde en post mere i linie skulle der
således returneres
33, Hanne, 33, 20050312, skærm, 4
33, Hanne, 33, 20050312, mus, 4
33, Hanne, 33, 20050312, cykel, 4
33, Hanne, 33, 20050312, buskort, 4
Er det korrekt opfattet?
Det kan i princippet godt lade sig gøre, men det er at blande pærer
og bananer sammen. Informationen om at Hanne har fire forekomster er
ikke relateret til den enkelte post i udtrækket, men hænger sammen
med alle de andre poster.
Jeg ville foreslå, at du i stedet laver to udtræk: Et der fortæller,
hvor mange poster hver enkelt har, og et der giver dig indholdet i de
pågældende poster.
-------------------------------------------------------------------------------
Hvorfor f.. vil min OE ikke sætte > foran nogen indlæg.
Nå men til dit 1. spørgsmål så ja det er korrekt opfattet.
Jeg syntes ikke det er at blande noget sammen da oplysningen om hvor mange
linier den enkelte kunde har, er noget jeg skal bruge og det ville være
smart hvis det kunne lade sig gøre i en enkelt sql. Løsningen som Jens
Koldbæk er kommet med virker ganske fint i nogle tilfælde men der er flere
ting i mine tabeller der skal tages højde for og så virker løsningen ikke.
De 2 tabeller som jeg nævnte var bare eksempler som mindede om mine faktiske
tabeller da jeg ikke troede de ekstra faktorer der skulle tages højde for
ville have betydning for hvordan sql sætningen skulle se ud (min fejl).
Men løsningen bliver at jeg laver 2 simple (som jeg kan finde ud af) sql´er
og så rent programmerings mæssig får dem sat sammen og når jeg så får tid
går jeg i gang med at lære lidt mere om sql.
Tak for hjælpen.
/HK
| |
Kristian Damm Jensen (16-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 16-03-05 10:45 |
|
Harald wrote:
<snip>
> Nå men til dit 1. spørgsmål så ja det er korrekt opfattet.
> Jeg syntes ikke det er at blande noget sammen da oplysningen om hvor
mange
> linier den enkelte kunde har, er noget jeg skal bruge og det ville
være
> smart hvis det kunne lade sig gøre i en enkelt sql.
At du skal bruge oplysningen om antal linier ændrer ikke ved at det er
at blande tingene sammen, når du forlanger at få den i sammen med de
enkelte linier.
Du forsøger ganske enkelt at gøre vold på den relationelle
tankegang; når man gør det løber man altid en stor risiko for at
løbe sig nogle staver i livet.
> Løsningen som Jens
> Koldbæk er kommet med virker ganske fint i nogle tilfælde men der
er flere
> ting i mine tabeller der skal tages højde for og så virker
løsningen ikke.
Jens Koldbæks indlæg dukker ikke op på Google - formodentlig
benytter han X-no-archive - så jeg er ude af stand til at kommentere
dem.
> De 2 tabeller som jeg nævnte var bare eksempler som mindede om mine
faktiske
> tabeller da jeg ikke troede de ekstra faktorer der skulle tages
højde for
> ville have betydning for hvordan sql sætningen skulle se ud (min
fejl).
> Men løsningen bliver at jeg laver 2 simple (som jeg kan finde ud af)
sql´er
> og så rent programmerings mæssig får dem sat sammen og når jeg
så får tid
> går jeg i gang med at lære lidt mere om sql.
Det vil sikkert være en god idé, hvis du skal bruge det mere. Held og
lykke.
Kristian
| |
|
|