syntaxisfout in Gegevensverkenner

The Stack Exchange Data Explorer allows SQL queries against a Stack Exchange database. I tried this one —

select
  month(CreationDate) month,
  year(CreationDate) year,
  sum(lower(left(Title,2))='wh')/count(*) wh,
  (select sum(Score)/count(*)
   from Posts u
   where month(CreationDate)=month(t.CreationDate)
     and year(CreationDate)=year(t.CreationDate)
     and lower(left(Title,2))='wh'
     and PostTypeId=1 -- question
  ) wh_score,
  sum(Score)/count(*) score,
  (select sum(AnswerCount)/count(*)
   from Posts u
   where month(CreationDate)=month(t.CreationDate)
     and year(CreationDate)=year(t.CreationDate)
     and lower(left(Title,2))='wh'
     and PostTypeId=1 -- question
  ) wh_answers,
  sum(AnswerCount)/count(*) answers
from Posts t
where PostTypeId=1 -- question
group by month,year;

— but the site told me

Onjuiste syntaxis bij ')'. Onjuiste syntaxis in de buurt van 'wh_score'. Onjuiste syntaxis in de buurt van 'wh_answers'.

en ik kan niet achterhalen waarom. Kan iemand me helpen, alsjeblieft?


Dingen die ik heb geprobeerd, zonder resultaat:

  • datepart(month,CreationDate) instead of month(CreationDate) (and likewise for year)
  • explicit as for aliases (then the latter two of the three errors complained about 'at' rather than about the aliases)
  • aliases that aren't built-in function names
  • left(Title,2) instead of lower(left(Title,2))
  • putting parentheses around the first two, and around the last two, of the four things joined by ands
  • explicit u. for column names in the subqueries
0
ja ru de
toegevoegd de auteur msh210, de bron
toegevoegd de auteur msh210, de bron

1 antwoord

  1. U kunt niet groeperen op basis van een alias, u moet de berekende kolom opgeven
  2. Dit is niet toegestaan: sum (lower (left (Title, 2)) = 'wh') . U moet het converteren naar een operator CASE WHEN .

Hier een gecorrigeerde query (die een time-out geeft):

select
    month(CreationDate) month
  , year(CreationDate) year
  , sum(case when lower(left(Title,2))='wh' then 1 else 0 end)/count(*) wh
  , (select sum(Score)/count(*)
   from Posts u
   where month(CreationDate)=month(t.CreationDate)
     and year(CreationDate)=year(t.CreationDate)
     and lower(left(Title,2))='wh'
     and PostTypeId=1 -- question
  ) wh_score,
  sum(Score)/count(*) score,
  (select sum(AnswerCount)/count(*)
   from Posts u
   where month(CreationDate)=month(t.CreationDate)
     and year(CreationDate)=year(t.CreationDate)
     and lower(left(Title,2))='wh'
     and PostTypeId=1 -- question
  ) wh_answers,
  sum(AnswerCount)/count(*) answers
from Posts t
where PostTypeId=1 -- question
group by month(CreationDate), year(CreationDate);

Wat probeer je te doen met deze vraag?

1
toegevoegd
Vraag in een afzonderlijke vraag. Ik begrijp niet wat u met deze vraag probeert te doen, dus ik kan u niet verder helpen.
toegevoegd de auteur Cyril Gandon, de bron
Dank je! 1. Het werkt nu. (En heeft geen time-out voor mij, maar ik doe het voor een kleine SE-site.) Maar het behandelt (of, althans, displays) elke kolom in het resultaat als een geheel getal, dus wh komt (vanzelfsprekend) zoals altijd 0 . Weet jij daar een weg omheen? (Natuurlijk kan ik het apart vragen.)
toegevoegd de auteur msh210, de bron
Oké, zal doen. (Ik probeer te bepalen of wh - vragen 'beter' zijn dan andere vragen: specifiek of ze meer antwoorden of netto-stemmen hebben.)
toegevoegd de auteur msh210, de bron
toegevoegd de auteur msh210, de bron