Mein Kollege Peter machte mich auf einen Tests für Bewerber aufmerksam. Man solle Ihnen eine leichte Programmmieraufgabe geben, um die Fähigkeiten des Kandidaten zu erleben. Als Beispiel soll ein Programm die Zahlen von 1 bis 100 ausgeben. Ist die Zahl hingegen durch 3 teilbar, dann statt dessen "Fizz". Ist sie durch 5 teilbar, dann "Buzz". Ist sie aber durch 3 und 5 teilbar, dann "FizzBuzz". Erstmals beschrieben wurde das offenbar im Artikel "Using FizzBuzz to Find Developers who Grok Coding".
Das Ganze hat zwei Aspekte:
- Taugen solche Tests überhaupt, um im Bewerbergespräch wertvolle Erkenntnisse zu sammeln?
- Und wie ist die TSQL-Lösung dieser konkreten Aufgabe…
Ich bin unsicher wegen der Aussagekraft: Ich persönlich würde gut ausgearbeitete Tests zur Auswahl der Bewerber befürworten, um einfach besser einschätzen zu können, ob sie die gewünschten Qualifikationen haben. Leider kann ich in Bewerbergesprächen nicht so gut einschätzen, was die Leute nur sagen und was sie tatsächlich können. Leider erlebte ich schon, dass die Selbsteinschätzung und dementsprechend die Darstellung der Bewerber stark von der Wirklichkeit abwich.
Aber was sagt so ein Luschi-Test aus? Ich nehme mal an, dass er nur die totalen Blender ausfiltert, oder? Hat er sonst noch einen positiven Effekt?
Jetzt zum spaßigen Teil. In dem oben genannten Blog-Beitrag bringt jemand eine TSQL-Lösung:
declare @output varchar(15)
SET @counter = 1
while @counter < 101
begin
SET @output = ''
IF @counter % 3 = 0
SET @output = 'Fizz'
IF @counter % 5 = 0
SET @output = @output + 'Buzz'
IF @output = ''
SET @output = @counter
print @output
SET @counter = @counter + 1
end
Diese Lösung gefällt mir besser:
CASE WHEN number%15=0 THEN 'FizzBuzz'
WHEN number%3=0 THEN 'Fizz'
WHEN number%5=0 THEN 'Fizz'
ELSE CAST (number AS Varchar(10)) END AS "number"
FROM master.dbo.spt_values
WHERE type='P'
AND number BETWEEN 1 AND 100
Wem das zu wenig tricky ist, hier eine komplexere Lösung, die ohne Modulo auskommt:
ISNULL(MAX(T.word),CAST (number AS Varchar(10))) AS "number"
FROM master.dbo.spt_values AS S
LEFT OUTER JOIN ( SELECT 3, 'Fizz' UNION
SELECT 5, 'Buzz' UNION
SELECT 15, 'FizzBuzz') AS T(num,word)
ON S.number%T.num=0
WHERE S.type='P'
AND S.number BETWEEN 1 AND 100
GROUP BY S.number



Hi Thomas,
hiermit wärest du aber nach Hause geschickt worden
SELECT
CASE WHEN number%15=0 THEN 'FizzBuzz'
WHEN number%3=0 THEN 'Fizz'
!!!! WHEN number%5=0 THEN 'Fizz' !!!!
ELSE CAST (number AS Varchar(10)) END AS "number"
FROM master.dbo.spt_values
WHERE type='P'
AND number BETWEEN 1 AND 100
Vielleicht ist da ja auch nur ein Konzentrationstest
Viele Grüße
Christoph
Hallo Christoph,
stimmt! Das wäre blöd gelaufen. Das kommt davon, wenn man es besser wissen will als andere…
Ich korrigiere meinen Fehler jetzt mal nicht, als Mahnung daran die Ergebnisse besser zu kontrollieren bevor ich sie poste…
Viele Grüße
Thomas
PS: Sorry für die späte Antwort. Wir waren an der See…