[mysql] count po warunkach do spełnienia??

0

mamy takie 2 tabele

tabela1   

t_id  |	nazwa   |  ilosc
-------------------------
1     |	nazwa1  |  2
2     |	nazwa2  |  3
3     |	nazwa3  |  4
4     |	nazwa4  |  5


tabela2

id    |	usr   | w_ilosc |  w_t_id
----------------------------------
1     |	usr1  |  6       |   1	
2     |	usr1  |  9       |   2	
3     |	usr1  |  1       |   3	
4     |	usr1  |  7       |   4	

5     |	usr2  |  2       |   1	
6     |	usr2  |  3       |   2	
7     |	usr2  |  4       |   3	
8     |	usr2  |  5       |   4	

z czego w_t_id z tabeli2 wskazuje na t_id w tabeli1

chciałbym napisać taki jakiś warunek który automatycznie wyciągnąłby z tabeli2 ilości dla usera1 i porównał je z tabelą1 i jeżeli dla każdego w_t_id = t_id w_ilosc > ilosc to "cos" a jak nie to "cos1" :)

widziałem, że ktoś kiedyś coś podobnego robił gdzieś w necie ale nie mogę się do tego dokopać :/

0

dla jasności, wszystkie w_ilosc mają być większe od ilosc
więc jakoś count(*) wykorzystać ale jakk?

0
SELECT
  case when t2.w_ilosc > t1.ilosc then 'cos1' else 'cos2' 
FROM
  tab1, t1,
  (SELECT min(w_ilosc) w_ilosc FROM tab2 GROUP BY w_t_id) t2
WHERE
  t1.t_id = t2.w_t_id;
0

Pozwolę sobie poprawić:

SELECT
  case when t2.w_ilosc > t1.ilosc then 'cos1' else 'cos2' END
FROM
  tab1, t1,
  (SELECT w_t_id, min(w_ilosc) w_ilosc FROM tab2 GROUP BY w_t_id) t2
WHERE
  t1.t_id = t2.w_t_id;
0

pozwalam :) masz rację

0

helloł

tab1, t1,

tu chyba bez przecinka

ale panowie, bardzo ładnie ale nie do końca o to mi chodziło
wynik dostałem taki:
cos1
cos1
cos2
cos1

super fajnie ale mi chodziło, że jeżeli WSZYSTKIE warunki naraz będą spełnione to cos1 a jak chociaż 1 nie będzie spełniony to cos2 :)

i dlatego kombinowałem coś z count

0
SELECT
  case when sum(x) = 0 then 'cos1' else 'cos2' end
FROM
  (SELECT
    case when t2.w_ilosc > t1.ilosc then 0 else 1 END x
  FROM
    tab1 t1,
    (SELECT w_t_id, min(w_ilosc) w_ilosc FROM tab2 GROUP BY w_t_id) t2  
  WHERE
    t1.t_id = t2.w_t_id) x;

być może tak też przejdzie

SELECT
  case when sum(case when t2.w_ilosc > t1.ilosc then 0 else 1 END) = 0 then 'cos1' else 'cos2' end
FROM
  tab1 t1,
  (SELECT w_t_id, min(w_ilosc) w_ilosc FROM tab2 GROUP BY w_t_id) t2  
WHERE
  t1.t_id = t2.w_t_id;
0

dziękuję ślicznie

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