MySQL中有几个有条件的COUNT

时间:2012-11-30 10:02:11

标签: mysql count

我目前正在使用其他一些统计信息来处理点击计数器,例如登录的访问者百分比等等。

到目前为止,我尝试了很多不同的SQL查询,但目前我仍然坚持这个:

SELECT COUNT(*) AS totalhits,
COUNT(DISTINCT ip) AS visitors,
COUNT(user_id > 0) AS hitsloggedin,
COUNT(DISTINCT ip, user_id > 0) AS visitorsloggedin
FROM db.tblhits

显然这是错误的。我在第三和第四个COUNT语句中计算了所有行,尽管有一些行user_id为0.但是,这两个第一个语句的工作正常。

我确定有人现在正在笑他的屁股,但这是我尝试过的。

非常感谢任何朝着正确方向的推动!

2 个答案:

答案 0 :(得分:3)

正如COUNT(expr)所述:

  

返回SELECT语句检索到的行中 NULL 的非expr值的计数

在第三种情况 expr user_id > 0中,当表达式求值为NULL时,它是非TRUE {1}}或FALSE;因此COUNT()的结果不是你所期望的。

由于MySQL没有真正的布尔类型,而是分别对10使用TRUEFALSE,因此您只需使用SUM()代替;在其他RDBMS中,您必须使用CASE expression

COUNT(CASE WHEN user_id > 0 THEN 1 ELSE NULL END)

对于你的第四个表达,你可以这样做:

COUNT(DISTINCT CASE WHEN user_id > 0 THEN ip ELSE NULL END)

答案 1 :(得分:0)

试试这个::

SELECT 

(Select COUNT(*) FROM db.tblhits )AS totalhits,
(select COUNT(DISTINCT ip) FROM db.tblhits) AS visitors,
(select COUNT(user_id) FROM db.tblhits where user_id>0) AS hitsloggedin,
(select COUNT(DISTINCT ip ) FROM db.tblhits where user_id > 0) AS visitorsloggedin
FROM db.tblhits