Topic: Sudėtinga užklausa, nžn ar subselecta naudot ar kažką kitą bandyt

Esmė turiu lentelę;

Data                            Ivykis
2010-11-12                 Laimejo
2010-11-15                 Pralose
2010-11-18                 Laimejo
2010-12-01                 Laimejo
2010-11-11                 Laimejo

Iš jos reikėtu pavaizduoti:
Mėnuo žinau, kad daromas su MONTHNAME, bet mane domina, tu skaičiukų gavimas, bet nelabai pavyksta ka sugalvoti.

Menuo        Ivykiai  Laimejo     Pralose
November   3              2              1
December   2              2              0

Re: Sudėtinga užklausa, nžn ar subselecta naudot ar kažką kitą bandyt

Užklausą aišku galima parašyt, reikės:
a) kurti du virtualius stulpelius: Laimejo ir Pralose, į kurių eilutes įrašysi NULL jeigu nebuvo reikšmės ir 1 jeigu buvo;
b) grupuoti pagal mėnesį ir tada sumuoti (SUM()) tuo du virtualius stulpelius;
c) sumuoti abieju stulelių rezultatą į naują virtualų stulpelį Ivykiai

Kaip matai tau reikės dinamiškai išskaičiuoti mėnesį iš datos stulpelio.

Bendrai paėmus pas tave problema tame, kad tu pirma sukūrei lentelę ir surašei duomenis, o tik paskui sugalvojai, ką tu su tais duomenimis darysi.

Viskas turi kiek kitaip. žinodamas, kokius duomenis tu gauni iš išorės, tu turi sukurti tokias duomenų struktūras, kad iš jų būtų patogu ir efektyvu pasiimti rezultatus norimom ataskaitom. Nesigilinant į kitas aplinkybes pas tave jau duomenų bazėje lentelė turi būti tokia, kad užtektų tik "SELECT menuo, ivykiai, laimejo, pralose FROM lenetele". (-;

Re: Sudėtinga užklausa, nžn ar subselecta naudot ar kažką kitą bandyt

Norint pagaminti užklausą iš turimų duomenų rekomenduoju dirbti žingsneliais.

Pirmas žigsnis būtų pasigaminti užklsuą, kurios rezultate būtų:

data, laimejo, pralaimejo
2010-11-12 1 0
2010-11-15 0 1
2010-11-18 1 0
2010-12-01 1 0
(...)

Ir tada "judėti" toliau.

Re: Sudėtinga užklausa, nžn ar subselecta naudot ar kažką kitą bandyt

minde wrote:

Norint pagaminti užklausą iš turimų duomenų rekomenduoju dirbti žingsneliais.

Pirmas žigsnis būtų pasigaminti užklsuą, kurios rezultate būtų:

data, laimejo, pralaimejo
2010-11-12 1 0
2010-11-15 0 1
2010-11-18 1 0
2010-12-01 1 0
(...)

Ir tada "judėti" toliau.

SELECT Date, if( Event =  'win', '1', 'NULL' ) AS Win, if( Event = 'lost', '1', 'NULL' ) AS lost
FROM `table`

o kokia toliau struktua siulytumete?

Date                    Win     lost
2010-11-01     1     NULL
2010-11-15     1     NULL
2010-11-20     NULL     1
2010-12-02     1     NULL
2010-12-10     NULL     1
2010-12-15     1     NULL

Re: Sudėtinga užklausa, nžn ar subselecta naudot ar kažką kitą bandyt

Toliau iš datos stulpelio išgauk Mėnesį;

Paskui sugrupuok (GROUP BY) pagal tą mėnesį.

O tada susumuosi Win, lost stulpelius (-;

6 (edited by apulis 2010-12-07 21:56:16)

Re: Sudėtinga užklausa, nžn ar subselecta naudot ar kažką kitą bandyt

minde wrote:

Toliau iš datos stulpelio išgauk Mėnesį;

Paskui sugrupuok (GROUP BY) pagal tą mėnesį.

O tada susumuosi Win, lost stulpelius (-;

Gavosi rezultatas, aciu uz if f-ijos parodyma, nes tokios nezinojau.

SELECT monthname(Date) As Date,count(Event) As Events, SUM(if( Event =  'win', '1', 'NULL' )) AS Win, SUM(if( Event = 'lost', '1', 'NULL' )) AS Lost
FROM `data` group by monthname(Date)
Tai cia gerai susumavimas bendru atveju, ar kazkaip reikai daryti pagal c varianta kaip siulei?