sumowanie wynikow dwoch tabel jednym zapytaniem?

0

Witam,

mam tabele która wygląda tak :

id | Type | Date | Money

1 | normal | 2013-05-20 | $0.50
2 | sale | 2013-05-19 | $0.40
3 | sale | 2013-05-18 | $0.45
4 | normal | 2013-05-17 | $0.38

i teraz aby zsumowac wszystko z kolumny money robie to tak :

$query = "SELECT date,money, SUM(money) FROM tabela WHERE type='normal'";
$stmt = $db->prepare($query);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH)) {
echo '<tr><td>'.$row['date'].'</td><td>$'.round($row['SUM(money)'],2).'</td></tr>';
} 

wiem jak wyciągnać sumę tylko "type" "normal", nie wiem jak wyciagnąć za pomocą jednego zapytania sumę type normal i sale
jak za pomocą "jednego zapytania" wyświetlić sumę ale tylko sumę z "type" -> sale, + osobno sumę z "type" normal.

wiem że są to całkowite podstawy mysql-a :( dziękuje za pomoc.

0

...

GROUP BY type

Jaki ma sens pytanie o money i date skoro sumujesz money? Z którego rekordu datę wyświetlisz?

0
bogdans napisał(a):

...

GROUP BY type

Jaki ma sens pytanie o money i date skoro sumujesz money? Z którego rekordu datę wyświetlisz?

ok wiec teraz to powinno wygladać tak ?

$query = "SELECT SUM(money) FROM tabela WHERE type='normal' GROUP BY type";
$stmt = $db->prepare($query);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_BOTH)) {
echo '<tr><td>$'.round($row['SUM(money)'],2).'</td></tr>';

tylko że nadal nie o taki rezultat mi chodzi, założmy że tych rekordów mam więcej, przykładowo

id | Type | Date | Money

1 | normal | 2013-05-20 | $0.50
1 | normal | 2013-05-20 | $0.44
1 | normal | 2013-05-20 | $0.50
1 | sale | 2013-05-20 | $0.44
1 | sale | 2013-05-20 | $0.44
1 | sale | 2013-05-19 | $0.44
1 | normal | 2013-05-19 | $0.50
2 | sale | 2013-05-19 | $0.40
3 | sale | 2013-05-18 | $0.45
3 | normal | 2013-05-18 | $0.45
3 | normal | 2013-05-18 | $0.45

i chciałbym wyświetlać to w taki sposób w tabeli.

Date | normal total | sale total
2013-05-20 | $1.44 | $0.88
2013-05-19 | $0.50 | $0.40
2013-05-18 | $0.90 | $0.45

i to wszystko zrobić jednym zapytaniem.

1
SELECT `date`, Sum(Case When `type`='normal' Then `money` end) `normal total`, Sum(Case When`type`='sale' Then `money` end) `sale total` FROM tabela WHERE `type` IN ('normal', 'sale') GROUP BY `date`
  1. Staraj się nie używać nazw obiektów korzystając z słów kluczowych: type, date, money itp.
  2. WHERE teoretycznie jest niepotrzebny - jest to jednak zabezpieczenie, gdyby ci inne typy wyskoczyły
  3. Jeśli danego typu nie będzie wcale, to nie otrzymasz 0, tylko Null. Jeśli nie chcesz, aby tak było, to przed "end" wstaw: " else 0 "
0

dzięki za poświecony czas! :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1