mysql - Sql 显示每个组中前 10 个请求的产品

标签 mysql sql join subquery

我的数据库中存储了以下数据。

我想知道每辆车搜索次数最多的 10 个零件是什么。 下面我做了一个存储在数据库中的数据的示例。

一张表包含带有汽车 ID 的汽车名称。
一张表包含每辆车的带有一个或多个请求 ID 的请求。
一张表包含带有请求的部分的名称。

Table cars

audi        (7)
bmw         (12)

Table request
7           (100)
7           (234)
7           (367)
7           (562)
7           (729)
7           (765)
7           (881)

Table request_parts

100         (achterband)
234         (voorband)
367         (motor)
562         (accu)
729         (achterband)
765         (kopeling)
881         (koeling)

查询应该返回类似这样的内容,如示例中“achterband”被发现两次

audi        achterband      2
audi        voorband        1
audi        motor           1
audi        accu            1
audi        kopeling        1

我当前的查询计算了每辆车请求“电机”零件的频率。但是我不知道如何不仅针对一种产品而且同时针对所有产品执行此操作。现在,汽车的名称并不重要,因为 ID 已经显示了。

SELECT COUNT(*), requests.sibben_brand_id, request_parts.name
FROM request_parts
JOIN requests ON requests.id = request_parts.request_id
WHERE requests.sibben_brand_id IS NOT NULL 
AND request_parts.name LIKE  'motor'
GROUP BY requests.sibben_brand_id 
ORDER BY COUNT(*) DESC ` 

有人知道我如何获得正确的数据吗?

最佳答案

试试这个:

SELECT COUNT(*), requests.sibben_brand_id, request_parts.name
FROM request_parts
JOIN requests ON requests.id = request_parts.request_id
WHERE requests.sibben_brand_id IS NOT NULL 
GROUP BY requests.sibben_brand_id,request_parts.name
ORDER BY COUNT(*) DESC ` 

关于mysql - Sql 显示每个组中前 10 个请求的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29140488/

相关文章:

mysql - 如何在MySQL中累积(stock)查询(flow)的结果

mysql - 如何对 MySQL 的结果集进行编号(不使用用户变量的另一种选择)

java - 如何有效地连接任意数量的 RDD?

sql - 使用 SQLite 的完全外部连接

php - 复杂报表需要结构最优的连接查询

php - mysqli_query 和 mysqli_fetch_assoc 给出错误

mysql - 连接事务表创建事务语句

sql - Mysql语法错误

MySQL:使用 If else 更新查询

SQL select 语句结合不同的表