반응형
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
를 서브쿼리로서 사용하고, 그 서브쿼리를 사용하여,value
s:
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
반응형
'programing' 카테고리의 다른 글
다른 열의 순서를 기준으로 그룹에서 값 하나를 선택합니다. (0) | 2022.09.12 |
---|---|
JavaScript에서 ISO 8601 형식의 문자열을 출력하려면 어떻게 해야 합니까? (0) | 2022.09.12 |
uint32, int32, uint64, int64 등의 유형이 stdlib 헤더에 정의되어 있습니까? (0) | 2022.09.12 |
Java는 정수를 little endian 또는 big endian으로 읽습니까? (0) | 2022.09.12 |
mysql 데이터베이스의 사용자 이름과 비밀번호를 확인하는 방법 (0) | 2022.09.12 |