-1

我需要计算一组已知数据之间差异的总和。php 中的等价物是 (count(array_diff_assoc($array1)). Mysql可以做到这一点吗?我有一组数据可以与表中的其他字段列进行比较。

我要比较的数据是columnA : 3, columnB : 6, columnC : 4

测试表是:

   ID       columnA     columnB    columnC
   1           2           6         1
   2           6           1         3
   3           3           6         4

预期结果:

 ID     numbersofdifferences
  3            0
  1            2
  2            3

感谢您的帮助,杰西卡

4

2 回答 2

2

这不一定是最干净的,但您可以使用带有 CASE 表达式的聚合函数:

select id,
    sum(case when columna = 3 then 0 else 1 end) +
    sum(case when columnb = 6 then 0 else 1 end) +
    sum(case when columnc = 4 then 0 else 1 end) TotalDiff
from yourtable
group by id;

请参阅SQL Fiddle with Demo

编辑,这也可以在没有聚合函数的情况下完成:

select id,
    (case when columna = 3 then 0 else 1 end) +
    (case when columnb = 6 then 0 else 1 end) +
    (case when columnc = 4 then 0 else 1 end) TotalDiff
from yourtable;

演示

于 2013-08-26T17:51:41.580 回答
1

没有内置的功能可以执行此类操作,但您可以手动执行。

select
    id,
    case columnA when $columnA then 1 else 0 end +
      case columnB when $columnB then 1 else 0 end +
      case columnC when $columnC then 1 else 0 end differences
  from
    myTable

但是,如果您希望它们按顺序排列,则需要一个子选择

select * from 
  (
    select
        id,
        case columnA when $columnA then 1 else 0 end +
          case columnB when $columnB then 1 else 0 end +
          case columnC when $columnC then 1 else 0 end differences
      from
        myTable
  ) sqlRequiresNameHere
  order by differences
于 2013-08-26T17:48:53.783 回答