Q&A for scientists using computers to solve scientific problems
WITH LanguageMapping AS ( SELECT CASE WHEN TagName IN ('js', 'javascript', 'jquery', 'node.js', 'reactjs', 'angularjs', 'vue.js', 'd3.js', 'express.js', 'ecmascript', 'vanilla-js', 'react', 'angular', 'vue') THEN 'JavaScript' WHEN TagName IN ('elixir', 'phoenix', 'erlang') THEN 'Elixir' WHEN TagName IN ('clojure', 'leiningen', 'ring') THEN 'Clojure' WHEN TagName IN ('haskell', 'ghc', 'cabal', 'stack') THEN 'Haskell' WHEN TagName IN ('lua', 'luajit', 'corona', 'love2d') THEN 'Lua' WHEN TagName IN ('matlab', 'octave', 'simulink') THEN 'MATLAB' WHEN TagName IN ('racket', 'scheme', 'lisp') THEN 'Racket' WHEN TagName IN ('dart', 'flutter') THEN 'Dart' ELSE NULL END AS ProgrammingLanguage, PostId FROM ( SELECT PostId, TagName, ROW_NUMBER() OVER (PARTITION BY PostId ORDER BY TagName) as rn FROM PostTags INNER JOIN Tags ON Tags.Id = PostTags.TagId ) t WHERE rn = 1 ) SELECT DATEPART(yyyy, Posts.CreationDate) AS Year, DATEPART(mm, Posts.CreationDate) AS Month, LanguageMapping.ProgrammingLanguage, COUNT(*) AS NumQuestions FROM Posts INNER JOIN LanguageMapping ON Posts.Id = LanguageMapping.PostId WHERE Posts.PostTypeId = 1 AND LanguageMapping.ProgrammingLanguage IS NOT NULL GROUP BY DATEPART(yyyy, Posts.CreationDate), DATEPART(mm, Posts.CreationDate), LanguageMapping.ProgrammingLanguage ORDER BY Year, Month, NumQuestions DESC