[ xeron @ 26.10.2007. 14:33 ] @
Code:

--------------
mysql  Ver 14.12 Distrib 5.0.37, for mandriva-linux-gnu (i586) using readline 5.2

Connection id:          86
Current database:       prodavnica
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.37 Mandriva Linux - MySQL Standard Edition (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 1 hour 31 min 30 sec

Threads: 1  Questions: 119  Slow queries: 0  Opens: 15  Flush tables: 1  Open tables: 9  Queries per second avg: 0.022
--------------


Izgled tabele prodavnica:

Code:

+---------+-----------+--------+
| artikal | dobavljac | cijena |
+---------+-----------+--------+
|    0001 | A         |   3.45 |
|    0001 | B         |   3.99 |
|    0002 | A         |  10.99 |
|    0003 | B         |   1.45 |
|    0003 | C         |   1.69 |
|    0003 | D         |   1.25 |
|    0004 | D         |  19.95 |
+---------+-----------+--------+


Pokusao sam napraviti upit koji bi mi iz tabele vratio najskupljeg dobavljaca za arikal '0003'.
Code:

mysql> SELECT artikal, dobavljac, MAX(cijena) FROM prodavnica WHERE artikal = '0003' GROUP BY artikal;
+---------+-----------+-------------+
| artikal | dobavljac | MAX(cijena) |
+---------+-----------+-------------+
|    0003 | B         |        1.69 |
+---------+-----------+-------------+
1 row in set (0.00 sec)

Dobijam tacnu cijenu, ali pogresnu oznaku dobavljaca, umjeto B bi trebalo stajati C. Mozda sam pogresno grupisao ili sta vec. Znam da se ovo moze rijesiti i na drugi nacin ...

Code:

mysql> SELECT artikal,dobavljac,cijena FROM prodavnica WHERE artikal = '0003' ORDER BY cijena DESC LIMIT 1;
+---------+-----------+--------+
| artikal | dobavljac | cijena |
+---------+-----------+--------+
|    0003 | C         |   1.69 |
+---------+-----------+--------+
1 row in set (0.00 sec)

Ali kako preko MAX() i GROUP BY. ?

Hvala !


[ chachka @ 26.10.2007. 15:34 ] @
Code:
SELECT artikal, dobavljac, cijena
  FROM prodavnica
 WHERE artikal = '0003'
   AND cijena = (SELECT MAX(p.cijena)
                   FROM prodavnica AS p
                  WHERE p.artikal = artikal)
[ xeron @ 26.10.2007. 16:23 ] @
Code:

mysql> SELECT artikal, dobavljac, cijena
    ->   FROM prodavnica
    ->  WHERE artikal = '0003'
    ->    AND cijena = (SELECT MAX(p.cijena)
    ->                    FROM prodavnica AS p
    ->                   WHERE p.artikal = artikal);
Empty set (0.00 sec)


Hm... Izgleda da ne radi.
[ xeron @ 26.10.2007. 16:42 ] @
Riješeno:
Code:

mysql> SELECT artikal, dobavljac, cijena FROM prodavnica
    -> WHERE artikal = '0003'
    -> AND cijena = (SELECT MAX(cijena) FROM prodavnica
    -> WHERE artikal = '0003');
+---------+-----------+--------+
| artikal | dobavljac | cijena |
+---------+-----------+--------+
|    0003 | C         |   1.69 |
+---------+-----------+--------+
1 row in set (0.00 sec)