[SQL] Group By zonder Aggregate functions

Pagina: 1
Acties:
  • 173 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 27-06 16:44
Hoi,

bij MySQL had ik dit nodig om een lijst te groeperen :

code:
1
Select Username, fullname from sentfaxes where servername ='d1rtm600' Group by Username


maar onder MsSQL geeft hij een melding dat hij een aggregated function wil hebben..

maar ik wil dat helemaal niet, ik moet gewoon een lijstje hebben met unieke namen. moet ik daarvoor een andere functie gebruiken bij MsSQL ?

code:
1
SELECT column,SUM(column) FROM table GROUP BY column

zie bijvoorbeeld deze, hij gebruikt SUM, ik kan natuurlijk dit wel gebruiken en de gehele sum niet uitlezen, maar dat vind ik zonde van de snelheid (500.000 records)

[ Voor 27% gewijzigd door ArjanC op 16-04-2004 11:01 ]


Acties:
  • 0 Henk 'm!

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20:37

Maasluip

Frontpage Admin

Kabbelend watertje

Een group by kun je idd alleen gebruiken als je iets sommert (of een andere z.g. aggregate functie als avg of zo gebruikt).
Je wil iets als:
Select distinct Username, fullname
  from sentfaxes
 where servername ='d1rtm600'

[ Voor 34% gewijzigd door Maasluip op 16-04-2004 09:37 ]

Signatures zijn voor boomers.


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
distinct:
code:
1
SELECT DISTINCT Username FROM

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Maasluip schreef op 16 april 2004 @ 09:36:
Een group by kun je idd alleen gebruiken als je iets sommert.
Je wil iets als:
Select distinct Username, fullname
  from sentfaxes
 where servername ='d1rtm600'
Hierbij geldt distinct wel voor de HELE rij, daar moet je wel rekening mee houden.

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20:37

Maasluip

Frontpage Admin

Kabbelend watertje

P_de_B schreef op 16 april 2004 @ 09:37:
[...]


Hierbij geldt distinct wel voor de HELE rij, daar moet je wel rekening mee houden.
Klopt. Als verweer wil ik wel aanvoeren dat ik er van uit ga dat een usernaam altijd maar één fullname heeft ;)
Dat is normaal bij Oracle. Uit de helpfiles:
Duplicate rows are those with matching values for each expression in the select list

[ Voor 20% gewijzigd door Maasluip op 16-04-2004 09:47 ]

Signatures zijn voor boomers.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:55
Waarom wil je groeperen als je niets hebt om op te groeperen ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 27-06 16:44
ik heb een hele lijst met faxen die verstuurt zijn door verschillende personen, nu wil ik een lijst hebben met de personen, dan groepeer je toch alle personen ?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:55
Nee, dan selecteer je enkel de personen.

Als je een lijst wilt van alle faxen die door bepaalde personen verstuurd werden, dan haal je alle gegevens op en verzorg je de lay-out van je lijst in de presentatie-laag.

Als je alle personen en faxen ophaalt, en je wilt groeperen op persoon, welke fax moet er dan getoond worden?

[ Voor 79% gewijzigd door whoami op 16-04-2004 10:01 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:03

gorgi_19

Kruimeltjes zijn weer op :9

burp2001 schreef op 16 april 2004 @ 09:54:
ik heb een hele lijst met faxen die verstuurt zijn door verschillende personen, nu wil ik een lijst hebben met de personen, dan groepeer je toch alle personen ?
Dat is puur een presentatievorm; dat heeft niets met de achterliggende data te maken. Je zoekt een master / detail overview. Of wil je alleen de personen hebben? Dan hoef je geen andere kolommen op te halen.

[ Voor 16% gewijzigd door gorgi_19 op 16-04-2004 09:59 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 27-06 16:44
het gaat om een inlog scherm, je kan dan een van de namen kiezen uit een lijst (Distinct uit database) en vul het wachtwoord in.

dan gaat hij naar hetvolgende scherm waar hij dus de faxen laat zien enzoo.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:55
burp2001 schreef op 16 april 2004 @ 10:14:
het gaat om een inlog scherm, je kan dan een van de namen kiezen uit een lijst (Distinct uit database) en vul het wachtwoord in.

dan gaat hij naar hetvolgende scherm waar hij dus de faxen laat zien enzoo.
Daar heb je dus totaal geen group by voor nodig hoor, maar ik vermoed dat je datamodel dus niet zo kosjer in elkaar steekt.

Je hebt toch wel een tabel met 'gebruikers' oid, en dan een tabel met faxen die gekoppeld is aan de gebruikers - tabel?

Op die manier hoef je dus op je login scherm enkel een simpele select te doen uit je gebruikerstabel, en toon je dus zo alle personen.
Na het inloggen kan je de faxen van die persoon tonen adhv de ingelogde gebruiker met een simpele select query op de faxen-tabel, en je zorgt er in je where clause voor dat enkel de faxen van de ingelogde gebruiker opgehaald worden.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 11:32

Knutselsmurf

LED's make things better

Aan de query te zien is het datamodel inderdaad niet helemaal kosjer. Als een Username en een fullname uit de tabel sentfaxes gehaald worden, dan lijkt het heel erg op dat het tijd wordt om dat datamodel aan te passen en een tabel met users toe te voegen.

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

burp2001 schreef op 16 april 2004 @ 09:33:
bij MySQL had ik dit nodig om een lijst te groeperen :
...
maar onder SQL geeft hij een melding dat hij een aggregated function wil hebben..

maar ik wil dat helemaal niet, ik moet gewoon een lijstje hebben met unieke namen. moet ik daarvoor een andere functie gebruiken bij SQL ?
Wees eens duidelijk als je een vraag stelt.

SQL is de universele database taal: Structured Query Language.
MySQL is een database waarmee je kan communiceren m.b.v. SQL.

Als je een andere database bedoelt, noem die dan even bij naam.

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 27-06 16:44
de tabel is niet aan te passen, deze word gemaakt door een gekocht programma (kosten 4500 euro :( )

daaromheen maken wij zelf een web applicatie.

Acties:
  • 0 Henk 'm!

  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 27-06 16:44
nu heb ik er nog eentje :( Limit..

code:
1
Select * from sentfaxes where servername = 'd1rtm600' and username = 'csdcfax' order by date DESC Limit 0,20


Heeft MsSQL ook zoiets ? ik kan er niet echt veel over vinden.. :'(

wat hij moet doen is beginnen bij row 0 en dan 20 records vanaf row 0 laten zien.

[ Voor 6% gewijzigd door ArjanC op 16-04-2004 11:02 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:03

gorgi_19

Kruimeltjes zijn weer op :9

Heeft SQL ook zoiets ? ik kan er niet echt veel over vinden..
Het helpt misschien als je niet gaat zoeken op SQL, maar op de database die je gebruikt. SQL Server gebruikt iets anders dan MySQL, bijvoorbeeld.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 11:32

Knutselsmurf

LED's make things better

Tsja, dan kan je inderdaad niet zoveel aan het datamodel doen. De eerder genoemde 'SELECT DISTINCT' is dan je oplossing.

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:55
burp2001 schreef op 16 april 2004 @ 10:44:
nu heb ik er nog eentje :( Limit..


Heeft SQL ook zoiets ? ik kan er niet echt veel over vinden.. :'(
Zoals reeds vermeld werd: SQL is een universele taal. Welk DBMS gebruik je?
Gebruik je SQL Server? Dan heb je zoiets als TOP.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 20:37

Maasluip

Frontpage Admin

Kabbelend watertje

whoami schreef op 16 april 2004 @ 10:47:
[...]

Zoals reeds vermeld werd: SQL is een universele taal. Welk DBMS gebruik je?
Gebruik je SQL Server? Dan heb je zoiets als TOP.
En in Oracle gebruik je
select ...
  from ...
 where rownum <= 20

Signatures zijn voor boomers.


Acties:
  • 0 Henk 'm!

  • ArjanC
  • Registratie: Juli 2001
  • Laatst online: 27-06 16:44
ik heb dit stukje gevonden op een PHP forum (zelf ken ik PHP helemaal niet)

btw, het gaat om een MsSQL server.. (srry about that..)


ODBC is slower....use the mssql.so /mssql.dll extension instead, or compile the source whith support for MSSQL (geeks!).
About the "LIMIT clause"...given the mysql query "SELECT * FROM my_table LIMIT 10" use "SELECT TOP(10) * from my_table" in mssql.


maar hoe zet je nou waar hij moet beginnen ?

deze laat nu de eerste 10 zien, maar vanaf row 0, hoe kan ik aangeven dat hij op row 10 moet beginnen en dan vanaf daar 10 laten zien?

Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
burp2001 schreef op 16 april 2004 @ 10:53:

deze laat nu de eerste 10 zien, maar vanaf row 0, hoe kan ik aangeven dat hij op row 10 moet beginnen en dan vanaf daar 10 laten zien?
Dat kan niet met een standaard T-SQL (= SQL Server SQL dialect) functie. Zoek eens op 'paging sql server' Er zijn wel voorbeelden te vinden.

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 19:20

ripexx

bibs

burp2001 schreef op 16 april 2004 @ 10:53:
ik heb dit stukje gevonden op een PHP forum (zelf ken ik PHP helemaal niet)

maar hoe zet je nou waar hij moet beginnen ?

deze laat nu de eerste 10 zien, maar vanaf row 0, hoe kan ik aangeven dat hij op row 10 moet beginnen en dan vanaf daar 10 laten zien?
Ik weet niets van MSSQL maar ik weet wel dat dit soort eenvoudige zaken vrij simpel op het web op te zoeken zijn. Kijk als je MySQL gewent bent en moet overschakelen naar MSSQL loop je tegen problemen op. Deze zelfde problemen zul je ook krijgen als je PostgreSQL, DB2 of Oracle gaat gebruiken ipv MSSQL of MySQL. Ga als basis uit van de SQL standaard en bekijk de manuals van de betreffende (R)DBMS. :)

buit is binnen sukkel

Pagina: 1