数字视图中的重复值

时间:2017-09-19 09:37:19

标签: mysql

美好的一天

我正在尝试对重复值进行编号。它在普通查询中很容易使用,但我在视图中需要它。

+------+--------+--------+
| Code | Alpha  | ISO    |
+------+--------+--------+
| B1123|   A    | AU     |
| B2343|   C    | AU     |
| C6678|   A    | AU     |
| D8980|   B    | AU     |
| D7789|   A    | AU     |
+------+--------+--------+

尝试编号Alpha列结果=

+------+--------+--------+-------+
| Code | Alpha  | ISO    |  Num  |
+------+--------+--------+-------+
| B1123|   A    | AU     |   1   |
| B2343|   C    | AU     |   1   |
| C6678|   A    | AU     |   2   |
| D8980|   B    | AU     |   1   |
| D7789|   A    | AU     |   3   |
+------+--------+--------+-------+

使用:

CREATE VIEW `Nr` AS 
set @row_num = 0; 
SELECT @row_num := @row_num + 1 as row_number,code,Alpha,iso
FROM MyDatabase
ORDER BY Alpha;

但是无法创建视图无法使用SET。

我也尝试了count()函数,但它也不起作用。

我还能做些什么才能在视图中获得带编号的列。

由于

2 个答案:

答案 0 :(得分:1)

假设您有一个ID列(或任何唯一列),您可以在相关子查询中使用它来使用聚合函数计数查找序列号:

select code,
    alpha,
    iso,
    (
        select count(*)
        from mydatabase t2
        where t1.alpha = t2.alpha
        and t2.id <= t1.id
    ) as num
from mydatabase t1;

答案 1 :(得分:0)

请考虑以下事项:

var randomNumber = Math.floor(Math.random() * 30) + 1;
console.log(randomNumber);
var setOfNums = [1,2,5,10,50];
setOfNums=setOfNums.sort(function(a,b){
  return b-a;
});
subset_sum(setOfNums,randomNumber);
function subset_sum(numbers, target, partial){
       partial = partial || [];
       s = partial.reduce(function(contor,elem){
        return contor+elem;
       },0);
       if(s == target){
        partial=partial.sort(function(a,b){
          return a-b;
        });
        console.log("sum"+JSON.stringify(partial)+"="+ target);
       }
       if(s >= target)
         return;
       if(partial.length>numbers.length)
         return;

     numbers.forEach(function(number,index){
        n = numbers[index];
        subset_sum(numbers, target, partial.concat(n)); 
    });
}