Q : "card_type 또는 split_type에"Attack "이 나타나면 레코드를 +1하는 쿼리."
대답 : 반환 할 결과 집합이 명확하지 않습니다. 내가 올바르게 이해 해요 경우 SELECT에 의해 반환 된 행이 예제 같은 것을한다면
편집 귀하의 코멘트/설명을 바탕으로
, :
card_type split_type
--------- -----------
Attack Attack
Attack Foundation
Attack Crescendo
Foundation Foundation
당신은 결과 집합을 원한다
Attack 3
Foundation 2
Crescendo 1
3 개의 행의 값이이므로 "공격"에 대해 3을 반환합니다.은 card_type
또는 split_type
입니다. 즉, 을 입력하지 않으면에 4의 값이 반환되는 횟수가 반환됩니다.
결과를 얻으려면 COUNT
집합체를 사용하여 이것을 두 개의 개별 쿼리로 실행하고 UNION ALL
집합 연산자를 사용하여 두 쿼리의 결과를 결합합니다. 첫 번째 쿼리는 단지 card_type
만큼 카운트를 얻고 두 번째 쿼리는 split_type
만큼 카운트를 얻습니다. "트릭"은 에 대한 두 번째 쿼리의 경우 이 card_type
과 일치하는 모든 행을 제외합니다.
두 개의 조합 된 쿼리는 인라인보기로 사용되며 외부 쿼리는 SUM()
집계 함수를 사용하여 개별 카운트를 결합합니다.
는이 같은 양식 뭔가를 사용하여 쿼리를 할 것 :
SELECT c.type
, SUM(c.cnt) AS cnt
FROM (SELECT ufs.card_type AS `type`
, COUNT(1) AS cnt
FROM ...
GROUP BY ufs.card_type
UNION ALL
SELECT ufs.split_type AS `type`
, COUNT(1) AS cnt
FROM ...
AND NOT (ufs.split_type <=> ufs.card_type)
GROUP BY ufs.split_type
) c
GROUP BY c.type
당신은 위의 쿼리에서 ...
교체, 원래 쿼리 두 배의 행 원본을 연결 것입니다.
이전 답 :
당신이 선택하려는 행을 반환하는 SELECT는 하나의 '트릭'조건부 테스트를 수행하기 위해 SELECT 목록에서 식을 사용하는 것입니다 있다고 가정하고, 반환 중 하나 0 또는 1, 다음 사양을 충족 레코드의 "수"를 반환하는 SUM()
집계를 사용 ...이 쿼리는 원래 쿼리와는 달리, 하나의 행을 반환
SELECT SUM(IF(ufs.card_type LIKE '%Attack%' OR ufs.split_type LIKE '%Attack%',1,0)) AS cnt
FROM jg1_products p
LEFT JOIN jg1_product_types pt ON p.products_type = pt.type_id
LEFT JOIN jg1_products_to_categories ptc ON p.products_id = ptc.products_id
LEFT JOIN jg1_cards_ufs ufs ON ufs.products_id = p.products_id
WHERE type_handler LIKE "%product_cards%"
AND ptc.categories_id = 89
그 여러 행을 반환합니다. 당신이 반환 원하는 결과 집합 (다시 말하지만, 그것은 분명하지 않다, 당신은 실제로 우리가 GROUP BY ufs.card_type
절을 포함하는 경우 반환되는 각각 별개의 card_type
에 대한 카운트를 반환 할 경우
가
MySQL은 또한 부울 표현식을 위해 편리한 축약을 제공합니다. : 부울 식의 평가는 1을 반환 0, TRUE 경우 경우 FALSE 및 NULL NULL 따라서이 표현하는 경우 :.
SELECT SUM(ufs.card_type LIKE '%Attack%' OR ufs.split_type LIKE '%Attack%')
FROM ...
이 NULL 값의 처리를 제외하고, 위의 쿼리의 표현에 해당합니다.
확인 하시겠습니까? 열이 문자열의 일부로 'Attack'
문자열을 "포함"하거나 전체 문자열 인 경우; 컬럼의 값이 'Attack'
정확하게 일치인지 확인하는 대신 LIKE
SELECT SUM(ufs.card_type = 'Attack' OR ufs.split_type = 'Attack') AS cnt
FROM ...
참고
DISTINCT
는 함수가 아닙니다의 동등 비교를 사용, 그것은 키워드입니다.
유효한 구문은 SELECT DISTINCT expr1, expr2, ... exprN FROM ...
입니다.
DISTINCT
키워드를 SELECT 키워드 뒤에 여러 번 넣거나 SELECT
바로 다음에 올리면 안됩니다.합니다 (DISTINCT
키워드도 COUNT()
집계 함수, 예를 들어 SELECT COUNT(DISTINCT expr)
을 포함하지만, 그 SELECT DISTINCT
보다는 완전히 다르다 할 수있다. 괄호는 완전히 무시됩니다
합니다. 즉, SELECT DISTINCT(foo)
는 SELECT DISTINCT foo
와 동일합니다. 괄호를 포함하는 것은 전적으로 불필요하고, 차종 그것은 마치 DISTINCT와 같은 기능입니다.
MySQL의 집계 [SUM()'] (http://www.mysqltutorial.org/mysql-sum/) 함수를 사용해 보셨습니까? –
아니요. 숫자가 아닌 값이기 때문에'sum() '을 어떻게 사용하는지 모르겠다. 두 개의'SELECT' 질의를하고 그 값을 합한 것이 아니라면? –
그럴 수도있다. 질문의 제목은 mi 썰매 나, 그래서 그걸 제안했다. –