在mysql中实现多表关联统计

此博客探讨了一种SQL查询方法,通过子查询和聚合函数来统计书籍订单的今日、昨日及总计支付金额和数量。同时,它展示了如何获取书籍的总评分,以及不同时间段内的积分消耗分布。内容涉及数据库管理和数据分析。

 可以通过子查询来实现

SELECT
b.id,
b.book_name,
sum( IF ( o.create_time > 0 && o.create_time < 9999999999, o.price, 0 ) ) today_pay_money,
sum( IF ( o.create_time > 0 && o.create_time < 9999999999, 1, 0 ) ) today_pay_num,
sum( IF ( o.create_time > 999 && o.create_time < 9999, o.price, 0 ) ) yesterday_pay_money,
sum( IF ( o.create_time > 999 && o.create_time < 9999, 1, 0 ) ) yesterday_pay_num,
sum(o.price) total_pay_money,
sum( IF ( o.create_time > 9999 && o.create_time < 99999, 1, 0 ) ) total_pay_num,
( SELECT SUM( total_score ) FROM book_reward_log WHERE book_id = b.id ) total_score,
(
 SELECT
 CONCAT_WS(
  ',',
  SUM( IF ( create_time > 0 && create_time < 998, score, 0 ) ),
  SUM( IF ( create_time > 9999 && create_time < 99998, score, 0 ) ),
  SUM( IF ( create_time > 99999 && create_time < 999998, score, 0 ) )
 )
 FROM
 book_consume_log
 WHERE
 book_id = b.id
 ) score
 FROM
 book_book b
 LEFT JOIN book_orders o ON b.id = o.bid
GROUP BY
 b.id

 

MySQL 中进行关联统计总数,可使用 `JOIN` 语句将关联起来,再用 `COUNT()` 函数统计记录数。以下是几种常见的实现方法: ### 内连接(INNER JOIN)统计 当需要统计与主有匹配记录的外记录数时,可使用内连接。 ```sql SELECT main_table.id, COUNT(outer_table.id) AS outer_count FROM main_table INNER JOIN outer_table ON main_table.id = outer_table.main_table_id GROUP BY main_table.id; ``` 在上述代码中,`main_table` 是主,`outer_table` 是外。通过 `INNER JOIN` 将两个根据关联字段 `main_table.id` `outer_table.main_table_id` 连接起来,再用 `COUNT(outer_table.id)` 统计每个主记录对应的外记录数,最后用 `GROUP BY main_table.id` 按主的 `id` 分组。 ### 左连接(LEFT JOIN)统计 若要统计的所有记录,即便某些主记录在外中无匹配记录,也将其包含在内,可使用左连接。 ```sql SELECT main_table.id, COUNT(outer_table.id) AS outer_count FROM main_table LEFT JOIN outer_table ON main_table.id = outer_table.main_table_id GROUP BY main_table.id; ``` 此代码中,`LEFT JOIN` 确保主的所有记录都会出现在结果集中。若主记录在外中无匹配记录,`COUNT(outer_table.id)` 会返回 0。 ### 子查询统计 除了使用 `JOIN` 语句,还可使用子查询统计总数。 ```sql SELECT main_table.id, (SELECT COUNT(*) FROM outer_table WHERE outer_table.main_table_id = main_table.id) AS outer_count FROM main_table; ``` 在这个查询里,子查询 `(SELECT COUNT(*) FROM outer_table WHERE outer_table.main_table_id = main_table.id)` 会为每个主记录统计对应的外记录数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值