programing

MariaDB 키별 값 개수 선택

sourcetip 2022. 9. 12. 12:18
반응형

MariaDB 키별 값 개수 선택

이 테이블이 있는데 공통값을 2개의 키로 카운트하고 싶습니다.예를 들어 키 1981과 1975를 입력하면 카운트 3이 됩니다(둘 다 2255, 2228, 2232가 있습니다.PHP로만 해결할 수 있지만 SQL보다 훨씬 느립니다.감사합니다.

표 샘플

전체 테이블 덤프(mysql 명령):덤프

PHP-ish 솔루션은 (최적화 없이 처음부터): (그리고 의사 코드-ish 텍스트는 죄송합니다)

$1 = Select * From tbl Where Key = key1;
$2 = Select * From tbl Where Key = key2;

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

return $counter;

2레벨의 집약이 필요합니다.

먼저 이 쿼리를 사용하여:

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

손에 넣다value양쪽이 모두 만족하는 조건을 만족시키는key를 서브쿼리로서 사용하고, 그 서브쿼리를 사용하여,values:

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

데모를 참조해 주세요.

다음 작업을 수행할 수 있습니다.

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
;

'DBFIDLE' 참조

언급URL : https://stackoverflow.com/questions/68275255/mariadb-select-count-of-values-by-keys

반응형