Portál AbcLinuxu, 12. května 2025 08:33
Řešení dotazu:
SUM
?
Co nějak takto?
SELECT SUM(`prenos`) FROM `tabulka` WHERE `ip`=nejakaip AND `datum` BETWEEN 'pocatecnidatum' AND 'konecnedatum';
NULL
.SHOW CREATE TABLE `tabulka`;
a ze tři záznamy, které tabulka obsahuje, třeba pomocí SELECT * FROM `tabulka` LIMIT 3;
.+-------------+------------+------------+-------------+ | 192.168.0.2 | 2010-06-20 | 631556 | 605978 | | 192.168.0.3 | 2010-06-20 | 45728639 | 1247445708 | | 192.168.0.4 | 2010-06-20 | 56461 | 162260 | | 192.168.0.5 | 2010-06-20 | 772212826 | 35172305602 | | 192.168.0.6 | 2010-06-20 | 0 | 124320 | | 192.168.0.7 | 2010-06-20 | 0 | 124320 | | 192.168.1.2 | 2010-06-20 | 1821936 | 81646996 | | 192.168.0.2 | 2010-06-21 | 620653 | 597616 | | 192.168.0.3 | 2010-06-21 | 9470534 | 162809724 | | 192.168.0.4 | 2010-06-21 | 381980 | 419496 | | 192.168.0.5 | 2010-06-21 | 1083498066 | 49329996906 | | 192.168.0.6 | 2010-06-21 | 0 | 131712 | | 192.168.0.7 | 2010-06-21 | 0 | 131712 | | 192.168.1.2 | 2010-06-21 | 599149 | 7495426 | | 192.168.0.2 | 2010-06-22 | 479106 | 458959 | | 192.168.0.3 | 2010-06-22 | 22005626 | 315926479 | | 192.168.0.4 | 2010-06-22 | 1551534 | 1303148 | | 192.168.0.5 | 2010-06-22 | 762227 | 24682077 | | 192.168.0.6 | 2010-06-22 | 22764 | 102816 | | 192.168.0.7 | 2010-06-22 | 0 | 102816 | | 192.168.1.2 | 2010-06-22 | 4276717 | 29151277 | | 192.168.0.2 | 2010-06-23 | 75194 | 71447 | | 192.168.0.3 | 2010-06-23 | 0 | 16548 | | 192.168.0.4 | 2010-06-23 | 0 | 16632 | | 192.168.0.5 | 2010-06-23 | 1823 | 17898 | | 192.168.0.6 | 2010-06-23 | 0 | 16632 | | 192.168.0.7 | 2010-06-23 | 0 | 16632 | | 192.168.1.2 | 2010-06-23 | 3111516 | 34678239 | +-------------+------------+------------+-------------+
SELECT SUM('data_out') FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-23'" +------+ | 0 | +------+
SELECT SUM(`data_out`) FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-23'
.
SELECT SUM(data_out) FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-21'Teda bez uvozovek .
SELECT SUM(`data_out`)
, musíte zvláštní znak `
escapovat, tedy SELECT SUM(\`data_out\`)
.
SUM('data_out')
se zpracovalo tak, že text 'data_out' se převedl implicitní konverzí na číslo, což je 0 a SUM(0) = 0SELECT SUM(data_out) FROM rrd_account WHERE ip = '192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-21'je jedním z možných, nicméně správnější a hlavně bezproblémovější je:
SELECT SUM(`data_out`) FROM `rrd_account` WHERE `ip`='192.168.0.3' AND `datum` BETWEEN '2010-06-20' AND '2010-06-21'Toliko SQL●
mysql ... -e "SELECT SUM(\`data_out\`) FROM \`rrd_account\` WHERE \`ip\`='192.168.0.3' AND datum BETWEEN '2010-06-20' AND '2010-06-21'" mysql ... -e 'SELECT SUM(`data_out`) FROM `rrd_account` WHERE `ip`'"='192.168.0.3' AND "'`datum`'" BETWEEN '2010-06-20' AND '2010-06-21'"Ale, že bych označil jen jeden za správný, to bych si netroufl, ale už bych si troufl říct, že váš je samozřejmě funkční, ale není úplně čistý a kdyby někdy v budoucnu vzniklo klíčové slovo například 'IP', mohlo by se stát, že dotaz již nebude funkční nebo také teoreticky by mohl udělat něco jiného.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.