0

クエリのカウントを計算する必要がありますが、問題が発生しました。

元のクエリはうまく機能します。
それは私に正しいカウント(3200)で1行を与えます:

select count(e.entity_id) 
from `catalog_product_entity` AS `e`
INNER JOIN `review` AS `rt` 
ON rt.entity_pk_value = e.entity_id
INNER JOIN `review_detail` AS `rdt` 
ON rdt.review_id = rt.review_id
INNER JOIN `review_store` AS `store` 
ON rt.review_id=store.review_id AND store.store_id=0

他の値を取得するには、このクエリを変更する必要があったため、これが新しいカウント クエリです。

select count(e.entity_id) 
from `catalog_product_entity` AS `e`
INNER JOIN `review` AS `rt` 
ON rt.entity_pk_value = e.entity_id
INNER JOIN `review_detail` AS `rdt` 
ON rdt.review_id = rt.review_id
LEFT JOIN `rating_option_vote` AS `vt` 
ON vt.review_id = rt.review_id
INNER JOIN `review_store` AS `store` 
ON rt.review_id=store.review_id AND store.store_id=0 
GROUP BY `rt`.`review_id`

2 番目のクエリでは、正しいカウント (3200) の 1 行ではなく、それぞれのカウントが異なる 3200 行が返されます。

私が必要とするのは次のようなものです:

SELECT COUNT (*) FROM
( `second_query`)

または、正しいカウントを返す他のソリューション

4

4 に答える 4

1

group by 句を削除します。

于 2013-04-03T12:14:07.443 に答える
1

これを試して

select TOP 1 count(e.entity_id) OVER() [Total Count]
from `catalog_product_entity` AS `e`
INNER JOIN `review` AS `rt` 
ON rt.entity_pk_value = e.entity_id
INNER JOIN `review_detail` AS `rdt` 
ON rdt.review_id = rt.review_id
LEFT JOIN `rating_option_vote` AS `vt` 
ON vt.review_id = rt.review_id
INNER JOIN `review_store` AS `store` 
ON rt.review_id=store.review_id AND store.store_id=0 
GROUP BY `rt`.`review_id`

また

SELECT COUNT(*)
FROM 
(select `rt`.`review_id`
from `catalog_product_entity` AS `e`
INNER JOIN `review` AS `rt` 
ON rt.entity_pk_value = e.entity_id
INNER JOIN `review_detail` AS `rdt` 
ON rdt.review_id = rt.review_id
LEFT JOIN `rating_option_vote` AS `vt` 
ON vt.review_id = rt.review_id
INNER JOIN `review_store` AS `store` 
ON rt.review_id=store.review_id AND store.store_id=0 
GROUP BY `rt`.`review_id`) AS T1
于 2013-04-03T12:24:22.610 に答える
0

なしでクエリを実行するgroup byと、暗黙的に結果全体のグループが作成され、その単一グループのカウントが取得されます。

を追加するgroup byと、レビューごとに 1 つのグループが作成され、結果は各グループのカウントになります。

クエリから句を削除するだけgroup byで、結果全体のカウントが返されます。

于 2013-04-03T12:16:25.143 に答える
0

これを試して

select TOP 1 count(e.entity_id) OVER (partition by '1')
from `catalog_product_entity` AS `e`
INNER JOIN `review` AS `rt` 
ON rt.entity_pk_value = e.entity_id
INNER JOIN `review_detail` AS `rdt` 
ON rdt.review_id = rt.review_id
LEFT JOIN `rating_option_vote` AS `vt` 
ON vt.review_id = rt.review_id
INNER JOIN `review_store` AS `store` 
ON rt.review_id=store.review_id AND store.store_id=0 
GROUP BY `rt`.`review_id`
于 2013-04-03T12:37:26.883 に答える