我目前正在使用其他一些统计信息来处理点击计数器,例如登录的访问者百分比等等。
到目前为止,我尝试了很多不同的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.但是,这两个第一个语句的工作正常。
我确定有人现在正在笑他的屁股,但这是我尝试过的。
非常感谢任何朝着正确方向的推动!
答案 0 :(得分:3)
正如COUNT(expr)
所述:
返回
SELECT
语句检索到的行中NULL
的非expr
值的计数
在第三种情况 expr
的user_id > 0
中,当表达式求值为NULL
时,它是非TRUE
{1}}或FALSE
;因此COUNT()
的结果不是你所期望的。
由于MySQL没有真正的布尔类型,而是分别对1
和0
使用TRUE
和FALSE
,因此您只需使用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