{"id":749,"date":"2014-08-27T22:37:17","date_gmt":"2014-08-27T20:37:17","guid":{"rendered":"https:\/\/vielhuber.de\/?p=749"},"modified":"2016-06-05T23:00:25","modified_gmt":"2016-06-05T21:00:25","slug":"sql-query-zur-ermittlung-einer-rangliste","status":"publish","type":"post","link":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/","title":{"rendered":"SQL-Query zur Ermittlung einer Rangliste"},"content":{"rendered":"<p>Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle \"user\" mit den Spalten \"id\" und \"score\" und ermittle eine anhand \"score\" sortierte Rangliste aller Benutzer, in der\u00a0Benutzer mit der gleichen Punktzahl dasselbe Ranking bekommen. Durch den Einsatz von <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/de\/user-variables.html\" target=\"_blank\">benutzerdefinierten Variablen<\/a> kann man diese Aufgabe intuitiv und einfach l\u00f6sen.<\/p>\n<p><!--more--><\/p>\n<p><pre>CREATE TABLE\r\n    user(id INT, score INT);\r\nINSERT INTO\r\n    user(id, score)\r\nVALUES\r\n    (1, 10), (2, 40), (3, 55), (4, 10), (5, 5), (6, 20), (7, 30), (8, 70), (9, 30)\r\n<\/pre>\n<p>Durch die Verwendung von zwei Variablen wird dies einfach gel\u00f6st<\/p>\n<pre>SET @score_prev = NULL;\r\nSET @cur_rank = 0;\r\nSELECT id, score, CASE\r\n    WHEN @score_prev = score THEN @cur_rank\r\n    WHEN @score_prev := score THEN @cur_rank := @cur_rank + 1\r\nEND AS rank\r\nFROM user\r\nORDER BY score DESC<\/pre>\n<p>und man erh\u00e4lt die gew\u00fcnschte Ausgabe<\/p>\n<pre>+--------+-----------+----------+\r\n|  *id*  |  *score*  |  *rank*  |\r\n|    8   |      70   |      1   |\r\n|    3   |      55   |      2   |\r\n|    2   |      40   |      3   |\r\n|    7   |      30   |      4   |\r\n|    9   |      30   |      4   |\r\n|    6   |      20   |      5   |\r\n|    1   |      10   |      6   |\r\n|    4   |      10   |      6   |\r\n|    5   |       5   |      7   |\r\n+--------+-----------+----------+\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle \"user\" mit den Spalten \"id\" und \"score\" und ermittle eine anhand \"score\" sortierte Rangliste aller Benutzer, in der\u00a0Benutzer mit der gleichen Punktzahl dasselbe Ranking bekommen. Durch den Einsatz von benutzerdefinierten Variablen kann man diese Aufgabe intuitiv und einfach [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"gtbabel_prevent_lngs":"","gtbabel_alt_lng":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-749","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-blog"},"acf":[],"yoast_head":"<title>SQL-Query zur Ermittlung einer Rangliste &#060; Vielhuber David<\/title>\n<meta name=\"description\" content=\"Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle &quot;user&quot; mit den Spalten &quot;id&quot; und &quot;score&quot;...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL-Query zur Ermittlung einer Rangliste &#060; Vielhuber David\" \/>\n<meta property=\"og:description\" content=\"Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle &quot;user&quot; mit den Spalten &quot;id&quot; und &quot;score&quot; und\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/\" \/>\n<meta property=\"og:site_name\" content=\"Vielhuber David\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-27T20:37:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-06-05T21:00:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"552\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:site\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"David\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"1\u00a0Minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/\"},\"author\":{\"name\":\"David\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"headline\":\"SQL-Query zur Ermittlung einer Rangliste\",\"datePublished\":\"2014-08-27T20:37:17+00:00\",\"dateModified\":\"2016-06-05T21:00:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/\"},\"wordCount\":83,\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"articleSection\":[\"Blog\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/\",\"name\":\"SQL-Query zur Ermittlung einer Rangliste &#060; Vielhuber David\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\"},\"datePublished\":\"2014-08-27T20:37:17+00:00\",\"dateModified\":\"2016-06-05T21:00:25+00:00\",\"description\":\"Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle \\\"user\\\" mit den Spalten \\\"id\\\" und \\\"score\\\" und\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/sql-query-zur-ermittlung-einer-rangliste\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vielhuber.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL-Query zur Ermittlung einer Rangliste\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/\",\"name\":\"Vielhuber David\",\"description\":\"Full-Stack Developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vielhuber.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\",\"name\":\"David\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"width\":700,\"height\":552,\"caption\":\"David\"},\"logo\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/vielhuber\"]}]}<\/script>","yoast_head_json":{"title":"SQL-Query zur Ermittlung einer Rangliste &#060; Vielhuber David","description":"Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle \"user\" mit den Spalten \"id\" und \"score\"...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/","og_locale":"de_DE","og_type":"article","og_title":"SQL-Query zur Ermittlung einer Rangliste &#060; Vielhuber David","og_description":"Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle \"user\" mit den Spalten \"id\" und \"score\" und","og_url":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/","og_site_name":"Vielhuber David","article_published_time":"2014-08-27T20:37:17+00:00","article_modified_time":"2016-06-05T21:00:25+00:00","og_image":[{"width":700,"height":552,"url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","type":"image\/jpeg"}],"author":"David","twitter_card":"summary_large_image","twitter_creator":"@vielhuber","twitter_site":"@vielhuber","twitter_misc":{"Verfasst von":"David","Gesch\u00e4tzte Lesezeit":"1\u00a0Minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/#article","isPartOf":{"@id":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/"},"author":{"name":"David","@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"headline":"SQL-Query zur Ermittlung einer Rangliste","datePublished":"2014-08-27T20:37:17+00:00","dateModified":"2016-06-05T21:00:25+00:00","mainEntityOfPage":{"@id":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/"},"wordCount":83,"publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"articleSection":["Blog"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/","url":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/","name":"SQL-Query zur Ermittlung einer Rangliste &#060; Vielhuber David","isPartOf":{"@id":"https:\/\/vielhuber.de\/#website"},"datePublished":"2014-08-27T20:37:17+00:00","dateModified":"2016-06-05T21:00:25+00:00","description":"Heute bin ich bei der Arbeit an einem Kundenprojekt auf folgende Aufgabe gesto\u00dfen: Man nehme eine SQL-Tabelle \"user\" mit den Spalten \"id\" und \"score\" und","breadcrumb":{"@id":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vielhuber.de\/blog\/sql-query-zur-ermittlung-einer-rangliste\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vielhuber.de\/"},{"@type":"ListItem","position":2,"name":"SQL-Query zur Ermittlung einer Rangliste"}]},{"@type":"WebSite","@id":"https:\/\/vielhuber.de\/#website","url":"https:\/\/vielhuber.de\/","name":"Vielhuber David","description":"Full-Stack Developer","publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vielhuber.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef","name":"David","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","contentUrl":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","width":700,"height":552,"caption":"David"},"logo":{"@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg"},"sameAs":["https:\/\/x.com\/vielhuber"]}]}},"_links":{"self":[{"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/posts\/749","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/comments?post=749"}],"version-history":[{"count":1,"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/posts\/749\/revisions"}],"predecessor-version":[{"id":1308,"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/posts\/749\/revisions\/1308"}],"wp:attachment":[{"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/media?parent=749"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/categories?post=749"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vielhuber.de\/zh-cn\/wp-json\/wp\/v2\/tags?post=749"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}