0

重複の可能性:
COUNT() と DISTINCT を一緒に使用できますか?

私はこのSQL文を持っています:

SELECT * FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE ( wp_term_relationships.term_taxonomy_id IN (4,3) )
AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'published')

そして、同じIDを持つ2つの行を取得します=>期待

を追加GROUP BY wp_posts.IDすると、行数が 1 つに減ります

今、SQLクエリで行数を取得したいと思います

SELECT COUNT(*) AS cnt FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE ( wp_term_relationships.term_taxonomy_id IN (4,3) )
AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'published')
GROUP BY wp_posts.ID

「GROUP BY」を使用しても、結果として「1」ではなく「2」が得られます。

最初のステートメントから行数を取得する正しいステートメントはどれですか?

4

3 に答える 3

0

そのGROUPBYがあると、論理的に意味がありません。

簡単な修正は、元のSQLを副選択として使用し、それに基づいてカウントを行うことです。-

SELECT COUNT(*) AS cnt  
FROM (SELECT wp_posts.ID  
FROM wp_posts 
INNER JOIN wp_term_relationships  
ON (wp_posts.ID = wp_term_relationships.object_id) 
WHERE ( wp_term_relationships.term_taxonomy_id IN (4,3) ) 
AND wp_posts.post_type = 'post'  
AND (wp_posts.post_status = 'published') 
GROUP BY wp_posts.ID) Sub1

または、テーブル間の関係(およびwp_posts.IDの一意性)によっては、次の手順で問題がない場合があります。

SELECT COUNT(DISTINCT wp_posts.ID) 
FROM wp_posts
INNER JOIN wp_term_relationships 
ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE ( wp_term_relationships.term_taxonomy_id IN (4,3) )
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'published')
于 2012-10-12T09:27:00.123 に答える