Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql] Group by: enkel als twee andere kolommen ook matchen

Pagina: 1
Acties:

  • guanche
  • Registratie: Augustus 2003
  • Laatst online: 01-04-2024
Hallo snel vraagje, want mijn SQL vaardigheden zijn nog niet wat ik wil dat ze zijn.

Ik zit met een geval waar ik een GROUP BY op een kolom met data ('datums' dus ;) ) zet, waarvan ik het aantal met een COUNT(*) wil kunnen weergeven. Dit mag alleen gebeuren als van een andere kolom (zeg 'col2') ook de waardes overeenkomen.

Mijn zoektocht over google en dit forum hebben me nog niet het juiste antwoord geleverd, wat ik voornamelijk zie is dit probleem, maar dan waarin mijn 'col2' kolom een specifieke waarde moet hebben. Ik gok dat ik de verkeerde richting uitzoek, want het lijkt me dat dit redelijk straight-forward is.

Iemand die me de juiste richting op kan duwen? _/-\o_

SQL:
1
SELECT col1, col2, col_time, COUNT(*) FROM my_table GROUP BY col_time

Verwijderd

Ik weet niet of ik goed begrijp wat je bedoelt.

Wil je groeperen indien col2 = col_time?

Of wil je enkel de resultaten zien waarbij col2 gelijk is aan col_time, en die resultaten groeperen?

Of wil de resultaten zien waarbij col2 gelijk is aan een waarde die jij zelf meegeeft en die resultaten groeperen?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
GROUP BY kan op meerdere expressies, niet enkel kolommen.

Voorbeeld:
GROUP BY firstCol, secondCol, a < b, x = y, SOME_FUNCTION(z) = 42, etc. etc.

Dus als jij weet hoe je wil groeperen, dan staat hierboven hoe het kan. :P

{signature}


  • guanche
  • Registratie: Augustus 2003
  • Laatst online: 01-04-2024
Verwijderd schreef op donderdag 08 augustus 2013 @ 13:06:
Ik weet niet of ik goed begrijp wat je bedoelt.

Wil je groeperen indien col2 = col_time?

Of wil je enkel de resultaten zien waarbij col2 gelijk is aan col_time, en die resultaten groeperen?

Of wil de resultaten zien waarbij col2 gelijk is aan een waarde die jij zelf meegeeft en die resultaten groeperen?
Ik zou enkel willen groeperen op col_time, als in de regels die gegroepeerd worden ook col2 gelijk aan elkaar zijn

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dat kun je toch gewoon met een WHERE doen?

SELECT COUNT(col_time)
FROM Tabel
GROUP BY col_time
WHERE col_time=col2

Of bedoel je dat col2 overeen moet komen met de COUNT(col_time), dan moet je HAVING gebruiken. Misschien een klein voorbeeldje geven met wat data?

[ Voor 3% gewijzigd door P_de_B op 08-08-2013 13:34 ]

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


Verwijderd

P_de_B schreef op donderdag 08 augustus 2013 @ 13:34:
Dat kun je toch gewoon met een WHERE doen?

SELECT COUNT(col_time)
FROM Tabel
GROUP BY col_time
WHERE col_time=col2

Of bedoel je dat col2 overeen moet komen met de COUNT(col_time), dan moet je HAVING gebruiken. Misschien een klein voorbeeldje geven met wat data?
Hier lijkt me iets niet te kloppen.

ofwel doe je dit:
SELECT COUNT(col_time)
FROM Tabel
WHERE col_time=col2
GROUP BY col_time

ofwel doe je dit:

SELECT COUNT(col_time)
FROM Tabel
GROUP BY col_time
having col_time=col2

Hoewel ik niet meteen het nut van de laatste zie.
guanche schreef op donderdag 08 augustus 2013 @ 13:31:
[...]


Ik zou enkel willen groeperen op col_time, als in de regels die gegroepeerd worden ook col2 gelijk aan elkaar zijn
Het is me nog altijd niet duidelijk wat je nu juist wil. Kan je het proberen met een voorbeeldje?

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Natrium, je wilt per COUNT wel graag zien waar die count bij hoort.

En COUNT(colname) en COUNT(*) zijn hetzelfde, tenzij colname NULL mag zijn.

  • guanche
  • Registratie: Augustus 2003
  • Laatst online: 01-04-2024
Ik zal wat voorbeeld data geven ;) (zoals ik zei, volgens mij omschrijf ik het probleem verkeerd waardoor google me ook niet helpt)

Stel dit is mijn table:
col_1col_2col_time
1waarde199990000
2waarde21375962846
3waarde21375962846
4waarde31375962846
5waarde399991111


Nu ga ik groeperen op tijd, maar enkel waar col_2 ook met elkaar overeenkomt (zodat mijn COUNT klopt)

Gewenst resultaat:
col_1col_2col_timeCOUNT(*)
1waarde1999900001
2waarde213759628462
4waarde313759628461
5waarde3999911111


En ik kom niet verder dan dat regel 4 ook wordt mee gegroeppeerd

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Je wilt grouperen op col_2 en col_time, en dan de kleinste col_1 hebben dus. Daar is genoeg over te vinden.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
guanche schreef op donderdag 08 augustus 2013 @ 14:04:
En ik kom niet verder dan dat regel 4 ook wordt mee gegroeppeerd
Je doet nu Group by cal_time als ik je beschrijving goed begrijp; je wil echter groeperen op 2 kolommen en dus zul je dat moeten aangeven: Group by cal_time, col_2.

[ Voor 102% gewijzigd door RobIII op 08-08-2013 14:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • guanche
  • Registratie: Augustus 2003
  • Laatst online: 01-04-2024
Ja daar heb je helemaal gelijk in, uiteraard heb ik dit al zo geprobeerd, maar dat lijkt in mijn voorbeeld gewoon wel te werken. Ik vraag me af waarom het niet werkte.. Thanks, ik kom vooruit :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ik heb stiekem zo het vermoeden dat je nu een query hebt geschreven die alleen in MySQL werkt. Zie Programming FAQ - SQL: Hoe werkt dat GROUP BY nu eigenlijk? GlowMouse geeft hierboven al een hint voor hoe een correcte query eruit ziet. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • CaVeFiSh
  • Registratie: Januari 2005
  • Laatst online: 16-10 14:58
code:
1
2
3
4
SELECT MIN(col_1) AS [col_1],col_2,col_time,COUNT(*) AS [Count]
FROM Tabel
GROUP BY col_2,col_time
ORDER BY [col_1]

http://eu.battle.net/d3/en/profile/cavefish-2679/


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Ronduit geweldig! Zelf bedacht?

  • CaVeFiSh
  • Registratie: Januari 2005
  • Laatst online: 16-10 14:58
Als deze vraag gericht is aan mij, dan ja..zelf bedacht idd. Niet echt een moeilijke query, had de TS zelf met was leeswerk ook zelf kunnen uitvinden. Lijkt me dat dit echt de basics zijn van SQL (groeperen/aggregeren).

http://eu.battle.net/d3/en/profile/cavefish-2679/

Pagina: 1