반응형
SQL에서 두 행의 값과 두 행의 값 비율을 표시하는 방법은 무엇입니까?
다음과 같은 쿼리(MySQL에서는 일반적인 SQL 질문)가 있습니다.
SELECT 'Hits', variable_value
FROM global_status
WHERE variable_name = 'QCACHE_HITS'
UNION
SELECT 'Inserts', variable_value
FROM global_status
WHERE variable_name = 'QCACHE_INSERTS';
다음과 같은 결과를 얻을 수 있습니다.
+---------+----------------+
| Hits | variable_value |
+---------+----------------+
| Hits | 8330 |
| Inserts | 7075 |
+---------+----------------+
여기서 설명하고자 하는 것은 동일한 SQL에 있는 이 두 개의 비율입니다.기본적으로 다음과 같은 결과 집합입니다.
+---------+----------------+
| Hits | variable_value |
+---------+----------------+
| Hits | 8330 |
| Inserts | 7075 |
| H/I | 1.177
+---------+----------------+
이 SQL의 구성 방법JOIN이 필요할 것 같은데 SQL에 관련된 산술에서 두 행의 값을 얻는 방법을 잘 모르겠습니다.조언해 주셔서 감사합니다!
행이 아닌 세 개의 개별 열로 사용할 수 있는 경우 다음을 수행할 수 있습니다.
select max(case when variable_name = 'QCACHE_HITS' then variable_value end) as hits,
max(case when variable_name = 'QCACHE_INSERTS' then variable_value end) as inserts,
(max(case when variable_name = 'QCACHE_HITS' then variable_value end) /,
max(case when variable_name = 'QCACHE_INSERTS' then variable_value end)
) as ratio
from global_status ;
이 설정을 해제하는 것이 가장 간단할 수도 있습니다.
select h.hits,
(case when h.hits = 'hits' then hits
when h.hits = 'inserts' then inserts
else ratio
end)
from (select max(case when variable_name = 'QCACHE_HITS' then variable_value end) as hits,
max(case when variable_name = 'QCACHE_INSERTS' then variable_value end) as inserts,
(max(case when variable_name = 'QCACHE_HITS' then variable_value end) /,
max(case when variable_name = 'QCACHE_INSERTS' then variable_value end)
) as ratio
from global_status
) s cross join
(select 'hits' as hits union all
select 'inserts' union all
select 'h/i'
) x;
복잡해 보일 수 있지만 기본적으로 스캔만 하면 됩니다.global_status
1회(작은 테이블에는 큰 문제가 아닐 수도 있지만)
당신이 지정한 코드가 이 답을 주는 데 효과가 있을 거라 생각했는데요.
SELECT 'Hits', variable_value
FROM global_status
WHERE variable_name = 'QCACHE_HITS'
UNION
SELECT 'Inserts', variable_value
FROM global_status
WHERE variable_name = 'QCACHE_INSERTS'
UNION
SELECT 'H/I', (
(SELECT variable_value FROM global_status WHERE variable_name='QCACHE_HITS')
/
(SELECT variable_value FROM global_status WHERE variable_name = 'QCACHE_INSERTS')
) AS 'variable_value';
동작하지 않는 경우의 코멘트.행운을 빌어요.
이것은 동작합니다.
SELECT 'Hits', variable_value
FROM global_status
WHERE variable_name = 'QCACHE_HITS'
UNION
SELECT 'Inserts', variable_value
FROM global_status
WHERE variable_name = 'QCACHE_INSERTS'
UNION
select 'H/I',(SELECT variable_value
FROM global_status
WHERE variable_name = 'QCACHE_HITS')/(SELECT variable_value
FROM global_status
WHERE variable_name = 'QCACHE_INSERTS') as variable_value
);
삽입과 히트 결과가 다르므로 아래와 같이 두 개의 별도 서브쿼리를 합산하여 o/p를 구하십시오.
또한 추가 컬럼 등이 필요 없고 추가 행 데이터가 필요하기 때문에 참여는 필요하지 않습니다.
.... UNION
Select 'H/I',(SELECT variable_value
FROM global_status
WHERE variable_name =
'QCACHE_HITS')
/
( SELECT variable_value
FROM global_status
WHERE variable_name =
'QCACHE_INSERTS')
언급URL : https://stackoverflow.com/questions/55777443/in-sql-how-to-show-values-of-two-rows-and-ratio-of-the-values-of-those-two-rows
반응형
'programing' 카테고리의 다른 글
Ubuntu 16.04에 MySQL을 설치할 수 없습니다. (0) | 2022.11.02 |
---|---|
lamda 표현식은 코드 행을 저장하는 것 외에 다른 용도가 있습니까? (0) | 2022.11.01 |
Java에서 날짜 범위를 반복하는 방법 (0) | 2022.11.01 |
Python에서 16진수 문자열을 정수로 변환 (0) | 2022.11.01 |
소켓 '/var/mysql/mysql'을 통해 로컬 MySQL 서버에 연결할 수 없습니다.양말'(38) (0) | 2022.11.01 |