Выбор MySQL “накопил” столбец

Моя супер ленивая версия показа строки авторского права, которая автоматически остается в курсе:

&copy; <?php 
$copyYear = 2008; 
$curYear = date('Y'); 
echo $copyYear . (($copyYear != $curYear) ? '-' . $curYear : '');
?> Me, Inc.

В этом году (2008), это скажет:

© 2008 Я, Inc.

В следующем году, это скажет:

© 2008-2009 Я, Inc.

и навсегда остаются в курсе с текущим годом.

<час>

Или (PHP 5.3.0 +) компактный способ сделать это с помощью анонимной функции, таким образом, у Вас нет переменных, просачивающихся и не повторять код/константы:

&copy; 
<?php call_user_func(function($y){$c=date('Y');echo $y.(($y!=$c)?'-'.$c:'');}, 2008); ?> 
Me, Inc.
7
задан Marquis Wang 16 July 2009 в 05:51
поделиться

4 ответа

А как насчет

set @running_sum=0
select val, @running_sum:=@running_sum + val from your_table;

Я новичок в mysql, поэтому отнеситесь к тому, что я говорю, с недоверием.

То, что вы хотите, называется суммой нарастания. Есть несколько результатов Google .

7
ответ дан 6 December 2019 в 21:18
поделиться

Я бы использовал курсор :

>>> import MySQLdb
>>> db = MySQLdb.connect("localhost","username","password","test")
>>> cur = db.cursor()
>>> cur.execute("select myval from mytable")
>>> rs = cur.fetchall()
>>> accumulator = 0
>>> for r, in rs:
...   accumulator += r
...   print r, accumulator
...
1 1
4 5
6 11
3 14
2 16
5 21
0
ответ дан 6 December 2019 в 21:18
поделиться

Я не знаю, как \ если бы вы сделали это с одним выбором, но я думаю, что вы можете выбрать затем на втором проходе элементы имеют курсор, «накапливающийся».

0
ответ дан 6 December 2019 в 21:18
поделиться

Другой вариант (одна строка) может быть

SELECT val, @sm := @sm + val AS sum
  FROM myTable, (SELECT @sm := 0) r;

Если вы не хотите использовать переменные, вы можете использовать вложенный выбор однако обратите внимание, что этот запрос имеет более высокую сложность (более низкую производительность) и вы должны установить и привязать для сортировки, в моем примере я использовал _rowid, но любое другое поле может выполнить задание

  SELECT x1.val, (SELECT sum(val)
                    FROM myTable
                   WHERE id <= x1._rowid)
                    AS sum
    FROM myTable AS x1
ORDER BY _rowid;
5
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: