문제

다음과 같은 MySQL 쿼리가 있습니다.

SELECT *, SUM(...some SQL removed for brevety) AS Occurrences FROM some_table AS q
WHERE criterion="value" GROUP BY q.P_id ORDER BY Occurrences DESC LIMIT 10;

결과를 발생하는 경우> 0의 행으로 결과를 제한하고 싶습니다. 이것은 나에게 매우 간단 해 보이지만 작동하게 할 수는 없습니다. 내가 무엇을 시도하든, 어디에서나 헌신적이든,이 제한을 추가하려고 할 때마다 나는 대가로 줄을 얻지 못한다. 테이블에 반환해야 할 데이터가 있다는 것이 긍정적입니다. 내가하는 일을 성취하는 방법을 아는 사람이 있습니까?


나는 이것을 시도했지만 여전히 작동하지 않습니다. 왜 여전히 작동하지 않는지 아이디어가 있습니까?

SELECT *, SUM(...some SQL removed for brevety) AS Occurrences FROM some_table AS q
WHERE criterion="value" HAVING SUM(...some SQL removed for brevety)>0 GROUP BY q.P_id ORDER BY Occurrences DESC LIMIT 10;
도움이 되었습니까?

해결책

나는 SQL Server와 마찬가지로 MySQL에 익숙하지 않지만 T-SQL에서는 Clauses의 그룹에서 별명을 사용할 수 없습니다 (원래 Clauses의 순서도 생각했지만 그 이후로 잘못된 것으로 나타났습니다). . 이 경우 그룹의 결과를 기반으로 필터를 필터링하려고하므로 다음과 같이 hading 절을 사용합니다.

SELECT *, SUM(... some SQL removed for brevity ...) AS Occurrences
FROM
    some_table AS q
WHERE
    criterion = 'value'
GROUP BY
    q.P_id
HAVING
    SUM(... some SQL removed for brevity ...) > 0
ORDER BY
    Occurrences DESC
LIMIT 10;

다른 팁

이 쿼리는 나를 위해 작동합니다 ...

select order_id, sum(qty_ordered) as total_qty 
from sales_flat_order_item 
group by order_id 
having total_qty > 10
order by total_qty desc

아, 그 장소를 찾았습니다.

성명서는 지금입니다.

SELECT *, SUM(...some SQL removed for brevety) AS Occurrences FROM some_table AS q
WHERE criterion="value" GROUP BY q.P_id HAVING SUM(...some SQL removed for brevety)>0 ORDER BY Occurrences DESC LIMIT 10;

발생하여 주문으로 잘 작동하는 것 같습니다.

나는 집계가 있어야한다고 믿는다 HAVING 절. 그러나 분명히, 나는 별명이 받아 들여지는지 확실하지 않습니다.

HAVING (Occurrences > 0)

HAVING (SUM(...some SQL removed for brevety) > 0)

또는 하위 쿼리를 사용할 수 있습니다.

SELECT *
FROM (
   -- your current query
) AS sub
WHERE (Occurences > 0)

SQL 표준에 따르면, 열 별칭은 쿼리 본문에서 사용할 수 없으며, 이는 혼란스러운 성가신 것입니다. 당신이 시도한 내용을 감안할 때, 그것은 mySQL (및 일부 다른 DBM)에서도 마찬가지 인 것처럼 들립니다. 항해별로 표현식을 반복해야 할 것입니다.

또한 그룹 별 항목은 기본 키뿐만 아니라 *에있는 모든 열을 나열해야합니다 (그러나 기본 키를 논리적으로 지정하면 충분해야합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top