Kom ihåg mig?
Home Menu

Menu


Behöver hjälp med två MySQL-queries som gäckar mig

Ämnesverktyg Visningsalternativ
Oläst 2009-07-10, 15:59 #1
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Hej
Jag har försökt att hitta information online, men eftersom jag inte vet exakt vilka funktioner jag letar efter är det svårt. Jag skulle verkligen uppskatta om ni kunde peka mig i rätt riktning!

1) Jag har ett tabellinlägg för varje röst. Rösten kan vara antingen 1 eller 0. Det finns en kolumn som sparat, med CURDATE(), när rösten lades. Det finns en kolumn qid som beskriver på VAD rösten lades. Jag vill plocka ut de qid som fått flest röster den senaste månaden?

2) Man kan rösta 1 eller 0 där 1 är "ja" och 0 är "nej". Vad man röstat på beskrivs av kolumnen qid. Jag vill plocka ut de jämnaste frågorna, deras qid då, alltså plocka ut de qid som i den här tabellen har jämnast proportion t. ex. 49 % av rösterna är 1 och ORDER BY det.

tack!
Althalos är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-10, 16:13 #2
najks avatar
najk najk är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2005
Inlägg: 1 224
najk najk är inte uppkopplad
Har WN som tidsfördriv
najks avatar
 
Reg.datum: Oct 2005
Inlägg: 1 224
det här funkar inte men något typ "SELECT gid, COUNT(röst) AS antal_röster FROM tabell WHERE sparat > DATE_SUB(now(), INTERVAL 1 MONTH) GROUP BY gid ORDER BY antal_röster DESC"

sen kanske något sånt här "SELECT gid, COUNT(röst) AS antal_röster, SUM(röst) AS antal_röster_på_ja, antal_röster_på_ja/antal_röster AS röst_resultat FROM tabell GROUP BY qid ORDER BY röst_resultat" vet dock inte hur du får den att börja på 50 och neråt..

är som märks ingen guru på mysql, men du har kanske något att leta vidare lite på..
najk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-10, 17:01 #3
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
With rollup ger dig delsummor när du groupar.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-10, 18:23 #4
rikardottosson rikardottosson är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2009
Inlägg: 25
rikardottosson rikardottosson är inte uppkopplad
Nykomling
 
Reg.datum: Jul 2009
Inlägg: 25
HAVING, finns det in mySQL? Det använder man för att filtrera bort hela GROUPS när man kör GROUP BY, dvs längst ned i frågan.
rikardottosson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-10, 18:30 #5
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Originally posted by rikardottosson@Jul 10 2009, 17:23
HAVING, finns det in mySQL? Det använder man för att filtrera bort hela GROUPS när man kör GROUP BY, dvs längst ned i frågan.
Yes, HAVING finns.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-10, 22:43 #6
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Vi får ta det här steg för steg. Först så behöver du få ihop en summering av antalet röster på varje svarsalternativ specificerat per qid:

Kod:
  SELECT QID, VOTE, COUNT(VOTE) AS Antal
  FROM Tabell3
  GROUP BY QID, VOTE
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-11, 00:16 #7
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Fråga 1 har najk redan svarat på:

Kod:
SELECT qid, COUNT(vote) as votes FROM votestable WHERE votedate >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH) GROUP BY qid ORDER BY votes DESC
Detta bör fungera för fråga 2:

Kod:
SELECT qid, ABS(0.5 - AVG(vote)) AS middiff, 100 * SUM(vote) / COUNT(vote) AS yespercentage FROM test_votes GROUP BY qid ORDER BY middiff ASC
Jag hoppas det framgår vad som är vad i dina tabeller och att jag inte missuppfattat något. Redigerade den andra sql-satsen så du får ut procenten ja-svar (1) direkt.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-07-11, 00:41 #8
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Althalos Althalos är inte uppkopplad
Medlem
 
Reg.datum: Jan 2006
Inlägg: 282
Det här fungerar grymt bra! Tack allihop som har hjälpt mig!
Althalos är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 22:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017