dongzhi5587 2014-04-21 16:54
浏览 21
已采纳

计算带有3个表的项目

I try to calculate the number and percentage of items from 3 tables.

Tables:

categories
cat_id   | title
1        | phone
2        | tablet

products
prod_id   | cat_id | title
1001      | 1      | iphone
1002      | 1      | nokia
1003      | 1      | blackberry
1004      | 2      | ipad

user_products
id     | prod_id  | user_id
1      | 1001     | 1
2      | 1001     | 2
3      | 1001     | 3
4      | 1003     | 3
5      | 1004     | 4

What I have so far:

SELECT categories.cat_id, products.title, COUNT(products.title ) AS cnt
FROM categories
LEFT JOIN products ON categories.cat_id = products.cat_id
GROUP BY products.title

Desired result:

Tablets:
Ipad       | 1 | 100%

Phones:
Iphone     | 3 | 75%
Blackberry | 1 | 25%
  • 写回答

3条回答 默认 最新

  • drfm55597 2014-04-21 17:18
    关注
    SELECT c.cat_id, c.title AS cat_name, p.prod_id, p.title AS prod_name,
           COUNT(*) AS cnt,
           100*COUNT(*)/cat_total AS pct
    FROM products AS p
    INNER JOIN user_products AS up ON p.prod_id = up.prod_id
    INNER JOIN (SELECT c.cat_id, c.title, COUNT(*) AS cat_total
                 FROM categories AS c
                 JOIN products AS p ON c.cat_id = p.cat_id
                 JOIN user_products AS up ON up.prod_id = p.prod_id
                 GROUP BY c.cat_id) AS c ON c.cat_id = p.cat_id
    GROUP BY p.prod_id
    ORDER BY cat_name, cnt DESC
    

    DEMO

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向