0

次のような 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;

結果を Occurrences>0 の行に制限したいと考えています。これは私には非常に簡単に思えますが、うまくいかないようです。WHERE や HAVING に関係なく、この制限を追加しようとすると、NO ROWS が返されます。テーブルに返されるべきデータがあることは確かです。私がやっていることを達成する方法を知っている人はいますか?


私はこれを試しましたが、まだうまくいきません。それでもうまくいかない理由はありますか?

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;
4

5 に答える 5

5

私は SQL Server ほど MySQL に精通していませんが、T-SQL では、GROUP BY 句でエイリアスを使用できません (最初は ORDER BY 句も考えていましたが、それは正しくないことが示されています)。 . この場合、GROUP BY の結果に基づいてフィルター処理する必要があるため、次のように HAVING 句を使用します。

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;
于 2009-01-27T01:15:13.697 に答える
2

このクエリは私のために機能します...

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
于 2013-01-11T06:59:13.847 に答える
1

ああ、私はそれのための場所を見つけました。

声明は次のとおりです。

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;

ORDER BY Occurrences で問題なく動作しているようですが、

于 2009-01-27T01:19:37.323 に答える
0

集計はHAVING句に含める必要があると思います。ただし、確かに、エイリアスが受け入れられるかどうかはわかりません。

HAVING (Occurrences > 0)

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

または、サブクエリを使用できます。

SELECT *
FROM (
   -- your current query
) AS sub
WHERE (Occurences > 0)
于 2009-01-27T01:15:06.693 に答える
0

SQL 標準によると、クエリの本文では列のエイリアスを使用できないため、混乱を招きます。あなたが試したことを考えると、MySQL(および他のDBMS)にも同じことが当てはまるように思えます。おそらく、ORDER BY 句で式を繰り返す必要があります。

また、GROUP BY 句は、主キーだけでなく、* 内にあるすべての列をリストする必要があります (ただし、論理的には、主キーを指定するだけで十分です)。

于 2009-01-27T01:13:48.020 に答える