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
;
您需要 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。
我有这个 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
;
您需要 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。