MariaDB Select 键的值计数

MariaDB Select count of values by keys

我有这个 table,我想通过 2 个键来计算常用值... 例如,如果我输入 1981 和 1975 键,我得到的计数为 3(它们都有 2255、2228、2232)等。我只知道如何通过 PHP 解决它,但它比 [= 慢得多25=]。谢谢

完整 Table 转储(mysql 命令):DUMP

PHP-ish 解决方案是(从头开始,没有优化): (对于伪代码文本感到抱歉)

 = Select * From tbl Where Key = key1;
 = Select * From tbl Where Key = key2;

$counter = 0;
foreach( as $item)
{
    foreach( as $item2)
    {
        if($item->value == $item2->value)
        {
            $counter++;
        }
    }
}

return $counter;

你可以试试:

CREATE TABLE `keyvalue` (
  `v` int DEFAULT NULL,
  `k` int DEFAULT NULL
);

insert into keyvalue values 
   (1,1982),(2,1982),(3,1982),
   (1,1975),(2,1975),(3,1975),(4,1975),
   (3,1983);

select k1, k2
from (
   select 
      k1.k as k1,
      k1.v as v1, 
      k2.k as k2, 
      k2.v as v2, 
      row_number() over(partition by k1.k,k2.k) as R 
   from keyvalue k1 
   inner join keyvalue k2 on k1.k!=k2.k and k1.v=k2.v 
   ) x
where k2>k1
group by k1,k2
having max(R)=3
;

DBFIDDLE

您需要 2 个聚合级别。

首先,使用此查询:

SELECT value
FROM stats
WHERE `key` IN (1981, 1975)
GROUP BY value
HAVING COUNT(*) = 2 // the number of values that you search for

你得到满足两个key都属于他们的条件的value,然后用它作为子查询来统计value

SELECT COUNT(*) counter
FROM (
  SELECT value
  FROM stats
  WHERE `key` IN (1981, 1975)
  GROUP BY value
  HAVING COUNT(*) = 2
) t 

参见demo