业务需求: 查询 参与活动的人数 和获得奖励的次数
惯性思维: 简单查询 一个个的查询,最后汇总。
造成这样思考的原因是工作中 查询不是太多,基本上都是单表单个用户的查询; 也算是复习下 子查询的用法
初始:
select count(*) from Xx表名 where XX = bb group by xy
这样只能拿到抽奖或人数的 数据,需要手动加
思考: 对数据进行分组 并统计其中2个组的总和
对用户进行分组 ,统计人数, 并对获奖的用户进行过滤
select count(*) 人数, sum(number)
from (select count(*) number from table_name
where xx= bb and aa in ()
group by user_id) as numbers;
子查询方式
子查询可以用于过滤数据、计算聚合值或在查询中进行比较
- 子查询作为 SELECT 语句的一部分:
SELECT column1, column2, (SELECT column3 FROM table2 WHERE table2.id = table1.id) AS subquery_result
FROM table1;
子查询 (SELECT column3 FROM table2 WHERE table2.id = table1.id) 嵌套在主查询中,并返回与 table1 中每个 id 对应的 table2 表的 column3 值。
- 子查询作为 WHERE 子句的一部分:
SELECT column1, column2
FROM table1
WHERE column3 IN (SELECT column3 FROM table2);
子查询 (SELECT column3 FROM table2) 返回一个列名为 column3 的值列表,这些值被用于主查询中的筛选条件。
- 子查询作为 FROM 子句的一部分(内联视图):
SELECT subquery_result.column1, subquery_result.column2
FROM (SELECT column1, column2 FROM table1) AS subquery_result;
子查询 (SELECT column1, column2 FROM table1) 被赋予了一个别名 subquery_result,并作为一个内联视图在主查询中使用。