2

我想进行查询,选择类别名称并计算每个类别中的最大广告(活动),我已经这样做了:

SELECT
cat.cat_id,
cat.cat_desc,
COUNT(ad_id) AS cat_total_ads
FROM 
tab_categories AS cat LEFT JOIN
tab_ads AS ads ON ads.cat_id = cat.cat_id
WHERE
cat_active = @cat_active AND
cat_deleted = @cat_deleted
GROUP BY
cat_desc, cat.cat_id

此查询也在计算非活动广告。如何将非活动广告的值设为 0?

4

2 回答 2

3

实现此目的的一种方法是使用CASE语句的组合来确定是否要计算项目和SUM函数。

例如

SUM(CASE WHEN Active THEN 1 ELSE 0 END)
于 2013-08-01T19:11:34.703 回答
1

作为 colName 的 SUM (CASE ..... then 1 else 0 end) 应该为您完成!

试试这个,我没有要重新创建的表来测试,但是这个或类似的东西应该可以工作。

select 
  cat.cat_id,
  cat.cat_desc,
  count(ad_id) as Total,
  sum(case when ad_id= 0 then 1 else 0 end) as 'ad_id'

from
  tab_categoriesAS cat LEFT JOIN
tab_ads AS ads ON ads.cat_id = cat.cat_id
WHERE
cat_active = @cat_active AND
cat_deleted = @cat_deleted
GROUP BY
cat_desc, cat.cat_id
于 2013-08-01T19:14:40.930 回答