zapytanie mysql na trzech tabelach

0

Witam!
Mam następującą zagwozdkę.
Trzy tabele: s2012, s2011 i s2010
Każda z tabel ma tylko trzy pola: identyfikator klienta id, jego miasto zamieszkania city, oraz wielkość sprzedaży sales
klient może być w tabeli za rok 2010, ale równie dobrze może pokazać się dopiero w roku 2012, albo być w 2011 a potem zniknąć, jego obecność w tabeli jest przypadkowa

Mój problem jest następujący:

jak napisać zapytanie które będzie wybierało klientów z danego miasta, z dodatnią i rosnącą wartością sprzedaży w kolejnych latach

CREATE table results

SELECT s2012.city,
s2012.sales AS sales2,
s2011.sales AS sales1,
s2010.sales AS sales0,
(sales1-sales0) AS diff1,
(sales2-sales1) AS diff2,
(sales2-sales0) AS diff

FROM s2012,s2011,s2010

WHERE (s2012.city=s2011.city AND s2011.city=s2010.city AND diff1>0 AND diff2>0 AND diff>10)

ORDER BY diff DESC
limit 100;

zapytanie wyrzuca błędy: Error Code: 1054. Unknown column 'sales1' in 'field list'

jak poprawnie napisać tę kwerendę??

0

sales1-sales0 - jedno i drugie to tabela. jaki miałby być wynik odejmowania tabel według Ciebie?
odejmij od siebie konkretne pola, tj. sales1.sales-sales0.sales

tabele s2010, s2011, s2012 w bazie danych (tudzież takie bazy danych z zapytaniami pomiędzy nimi) to poważny błąd projektowy. tak się nie robi, bo co roku dojdzie jedna tabela i trzeba będzie zmieniać każde zapytanie na nich operujące (!).

0
jameskent napisał(a):

Witam!
Mam następującą zagwozdkę.
Trzy tabele: s2012, s2011 i s2010
Każda z tabel ma tylko trzy pola: identyfikator klienta id, jego miasto zamieszkania city, oraz wielkość sprzedaży sales
klient może być w tabeli za rok 2010, ale równie dobrze może pokazać się dopiero w roku 2012, albo być w 2011 a potem zniknąć, jego obecność w tabeli jest przypadkowa

Mój problem jest następujący:

jak napisać zapytanie które będzie wybierało klientów z danego miasta, z dodatnią i rosnącą wartością sprzedaży w kolejnych latach

CREATE table results

SELECT s2012.city,
s2012.sales AS sales2,
s2011.sales AS sales1,
s2010.sales AS sales0,
(sales1-sales0) AS diff1,
(sales2-sales1) AS diff2,
(sales2-sales0) AS diff

FROM s2012,s2011,s2010

WHERE (s2012.city=s2011.city AND s2011.city=s2010.city AND diff1>0 AND diff2>0 AND diff>10)

ORDER BY diff DESC
limit 100;

zapytanie wyrzuca błędy: Error Code: 1054. Unknown column 'sales1' in 'field list'

jak poprawnie napisać tę kwerendę??

już sobie poradziłem z problemem, poprawione zapytanie działa! :-)

0
SELECT * FROM (SELECT         s2012.city,
                 s2012.sales AS sales2,                
                 s2011.sales AS sales1,
                 s2010.sales AS sales0,
                 (s2011.sales-s2010.sales) AS diff1,
                 (s2012.sales-s2011.sales) AS diff2,
                 (s2012.sales-s2010.sales) AS diff
 FROM s2012 JOIN s2011 ON s2012.city=s2011.city JOIN s2010 ON s2011.city=s2010.city )x
 WHERE ( diff1>0 AND diff2>0 AND diff>10)
 ORDER BY  diff DESC

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