Mysql 基础应用之group by/ having 用法

《1》 关于group by/having/count和where的联合使用
group by是分组用的这一点毋庸置疑,最简单的使用。这里有一个关于产品(project)和产品留言(t_message)的表,用户可以给每一个产品留言
<1.1>根据产品分类,并统计每个产品下的留言数量
select target_id,count(*) from t_message group by target_id
这里的target_id是对应的产品id的外键,那么很明显在project表中主键为id

<1.2> 搜索总共有多少个产品有留言
select count() from (select target_id,count() from t_message group by target_id) as aslias
注:这里必须要指定as 别名,不然会有语法错误
结果值为30000
<1.3> 搜索总共有多少条留言
select count(*) from t_message ———————-foolish————-
总共有200000万以上的留言,说明每个项目平均有70个留言,当然只是平均而已。
<1.4> 搜索留言数大于1000的项目及其分别的留言数
select target_id,count(*) as num from t_message group by target_id having num > 1000
<1.5> 搜索状态值为付费用户并且留言数大于1000的用户
select target_id,count(*) as num from t_message where status = 1 group by target_id having num>1000
由此说明,where只能操作数据库中的字段,having只能操作于前面已经检索出的字段
———————–我是主题场景变换的分割线—————
现有留言表(t_message)和留言信息来源统计表(message_app_info),关联信息为id和message_id.目的是为了统计手机市场来源(比如360、huawei、oppo、小米等市场),手机品牌,手机型号等信息。
<1.6> 统计每个市场的留言数量情况
select apps_market,count(*) from message_app_info group by apps_market
这种统计最为简单,不需要联表查询,此时会列出每个市场下有多少条留言的数量
<1.7> 统计每天来自于app的留言有多少条(这时候不区分市场)
select publish_date,count(*) from t_message as a join message_app_info as b on a.id = b.message_id where publish_date > 20170802 group by publish_date
<1.8> 统计每天每个不同市场的留言数(个人认为mysql目前无法一条sql直接完成操作,因为这是两个维度的结果,最多可以这样写)
SELECT publish_date,COUNT(*),apps_market FROM t_message AS a JOIN message_app_info AS b ON a.id = b.message_id
WHERE publish_date > 20170802 GROUP BY publish_date,apps_market
这样的语句我们可以看懂,但在生产环境中是没有办法使用的,因为此时是这种处理结果这里写图片描述

猜你喜欢

转载自blog.csdn.net/zhuxineli/article/details/76905592
今日推荐