Toon posts:

[MySQL] Ingewikkelde query...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een query hebben die uitrekent hoeveel gaten er zijn, gegeven een tabel,
die er zo uit zo kunnen zien:

1
2
4
6
8
10
11
12
14
enz.

Hij moet als de query uitgevoert is, het antwoord 5 geven, omdat 3,5,7,9,13 er niet instaan.

Ik kan wel een aantal query's @ runtime laten generen die het goede antwoord opleveren, maar dat lijkt me niet efficiënt.

Ik heb al gekeken op de mySQLsite, hoe je dingen die je normaal met subquery's oplost moet doen(met LEFT JOINS), maar volgens mij kun je dat niet helemaal toepassen op dit probleem.

Weet iemand hoe dit met een query kan worden uitgeschreven?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 25-08 13:24

gorgi_19

Kruimeltjes zijn weer op :9

Als hoeveel gaten wordt 1,2,5 gezien? 2 gaten, omdat 3 en 4 missen?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
SELECT (1 + MAX(kolom) - MIN(kolom)) - COUNT(kolom) AS gaten
FROM tabel

maar dit gaat er wel vanuit dat er geen getallen dubbbel voorkomen (zorg dus dat `kolom` UNIQUE is

[ Voor 42% gewijzigd door Apollo_Futurae op 19-01-2003 15:38 ]

Pas de replâtrage, la structure est pourrie.


  • Patser
  • Registratie: Maart 2000
  • Laatst online: 05-08 23:11

Patser

this.Close();

Ik heb geen uitwerking voor je maar wel een richting om de oplossig te zoeken.
Scoreformulieren met meerdere antwoorden kom je wel eens tegen met a=1, b=2, c=4, d=8, e=16 etc.
Het antwoord is dan het totaal van je gekozen antwoorden. (bv. a en c gekozen geeft 5, totaal had 31 kunnen zijn dus je "mist" 26 en dat kan alleen met 2+8+16 gemaakt worden dus zijn b,d en e niet gekozen.

Dat kun je hier ook doen..
Je neemt het hoogste record en rekent 2^(hoogste-1) uit en voor alle record reken je 2^(value-1)
Dan is de rerkenregel nodig die alle onbrekende 2-machten geeft. Daar de 2log uit geeft je de ontbrekende getallen.
Het jammere is nu dat ik nog nooit die laatste rekenregel gezien heb, maar die is vast wel ergens te vinden.

Verwijderd

Topicstarter
gorgi_19 schreef op 19 January 2003 @ 15:32:
Als hoeveel gaten wordt 1,2,5 gezien? 2 gaten, omdat 3 en 4 missen?
Als 2 gaten.

De echte query die ik zoek is nog wel iets ingewikkelder, omdat er ook nog op willekeurige stukjes in de tabel moet worden geknipt(zodat er gaten wegvallen).
Maar ik denk dat vooral Apollo_Futurae iets heeft bedacht waar ik veel aan heb.

  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 17:21

Twee Dee

Morgen weer een ondertitel.

Als je weet dat elk item maar 1 keer voorkomt dan wordt het erg simpel...
Zoek het grootste getal op dat in de tabel staat, en trek hiervan het aantal items af.
Je moet dan zelf nog even bepalen of 0 ook meetelt (dan is het aantal gaten het grootste getal - het aantal items +1)

Als items niet uniek zijn wordt het wel iets lastiger, maar in je voorbeeld lijkt het er ook op dat het volgnummers zijn, waarbij waarden worden weggelaten.

edit:

Sorry niet goed gelezen, dit is al precies wat Apollo_Futurae had geschreven
|:(

[ Voor 11% gewijzigd door Twee Dee op 20-01-2003 10:46 ]

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Verwijderd schreef op 19 January 2003 @ 16:42:
[...]


Als 2 gaten.

De echte query die ik zoek is nog wel iets ingewikkelder, omdat er ook nog op willekeurige stukjes in de tabel moet worden geknipt(zodat er gaten wegvallen).
Maar ik denk dat vooral Apollo_Futurae iets heeft bedacht waar ik veel aan heb.
Hier wordt de query niet ingewikkelder van.
Gewoon in de where clause een BETWEEN opnemen en dezelfde query doet het.

[Toevoeging]
Als je telling met 3 begint, zijn dan 1 en 2 een gat?
Als dit zo is moet je om de MIN vervangen door 1.
en als je die between gaat inbouwen en je wilt alle ontbrekende getallen tot aan het bovenste knippunt ook als gaten zien, moet je de MAX vervangen door je bovengrens en je MIN door je ondergrens.
Dan wordt de query dus echt simpel, want dan krijg je Breedte_interval - COUNT(*)
[/Toevoeging]

[ Voor 31% gewijzigd door Goodielover op 20-01-2003 11:26 . Reden: Toevoeging ]

Pagina: 1