0

私はこのクエリを持っています:

$score = 10;
SELECT timecode, count(tag) as n_tags, tag
FROM dados
WHERE dados.tag = 'tag1' 
AND dados.filename = 'file.mp4'
AND (timecode >= '-5' AND timecode <= '15')
AND (timecode = '$score')
GROUP BY timecode
ORDER BY count(tag) DESC

ただし、6行を次のように変更します。

AND (timecode = '$score' AND n_tags > 3)

しかし、それは正しい方法ではないようです、それは機能しません。

何か案は ?

4

2 に答える 2

2

その行を WHERE 句から削除し、HAVING 句に入れます。HAVING 句は集計結果を調べます。WHERE はありません。

SELECT timecode, count(tag) as n_tags, tag
FROM dados
WHERE dados.tag = 'tag1' 
AND dados.filename = 'file.mp4'
AND (timecode >= '-5' AND timecode <= '15')
AND (timecode = '$score')
GROUP BY timecode
HAVING count(tag) > 3
ORDER BY count(tag) DESC

この行は冗長であり、削除される可能性があります: AND (タイムコード >= '-5' AND タイムコード <= '15')

SELECT timecode, count(tag) as n_tags, tag
FROM dados
WHERE dados.tag = 'tag1' 
AND dados.filename = 'file.mp4'
AND (timecode = '$score')
GROUP BY timecode
HAVING count(tag) > 3
ORDER BY count(tag) DESC
于 2013-02-20T14:32:23.600 に答える
2

WHERE 句で集計フィールドを使用することはできません。count()結果は、該当するすべての行が考慮された後にのみ利用できます。ただし、where個々の行が解析されるたびにフィルタリングが行われます。決まり文句ですが、孵化する前のニワトリの数を数えようとしています。

このようなことは、HAVING基本的に a とまったく同じ句で行う必要がwhereありますが、最終結果がクライアントに送り返される直前に適用されます。そう...

SELECT ..., count(tag) as n_tags
...
WHERE (timecode = '$score')

HAVING (n_tags > 3)
于 2013-02-20T14:33:26.953 に答える