在同一张表中找到与某一行的许多匹配项,并根据结果从第二张表中获取结果

时间:2018-07-23 17:50:31

标签: mysql sql mysqli

我知道问题标题可能不容易理解,但是我尝试解释一下:

users_table:

id | name | admin   | property_id
-----------------------------------
 1  | x    | 1       | 0
 2  | y    | 1       | 0
 3  | z    | 0       | 1
 5  | t    | 0       | 2
 6  | u    | 0       | 2
 7  | o    | 0       | 2

users_table具有两个或多个记录,分别为admin和一些其他记录,它们通过将admin与{{1}进行匹配而属于这些property_id记录之一}。最后,我想要的是id行数据及其admin的{​​{1}}。这是查询第一部分的输出:

count

直到现在我知道如何获得所需的结果,但是这里开始出现问题。我有另一个表

properties

这就是逻辑:每个 id | name | admin | property_count ----------------------------------- 1 | x | 1 | 1 2 | y | 1 | 3 有很多sells_table: id | seller_id | sell_amount ---------------------------- 1 | 3 | 250 2 | 5 | 120 3 | 7 | 100 4 | 5 | 200 ,每个admin有很多properties。 我想要property中每个sells的所有记录及其admin的计数。 然后以一种方式查询users_table,其中每个property_id的每个sells_table都要计算出property的数量和总销售量的admin。  例如,这应该是sellssumadmin的结果:

id 2

name y具有 name | properties | property_sells | property_amount -------------------------------------------------------- y | 3 | 3 | 420 。属于y的{​​{1}}的财产有3 properties id 5,也属于y(admin)的{​​{1}}的财产有two卖出, sells中的id 7

我知道这不是很复杂,但是解释它的方法并不那么容易。 我愿意接受编辑和提问。 预先感谢。

2 个答案:

答案 0 :(得分:1)

我想这就是你想要的:

select ua.id, ua.name, ua.admin, count(distinct u.id) as property_count,
       sum(s.sell_amount) as amount
from users_table ua left join
     users_table u
     on ua.id = u.property_id left join
     sales s
     on s.seller_id = u.id
where ua.admin = 1
group by ua.id, ua.name, ua.admin;

答案 1 :(得分:1)

http://sqlfiddle.com/#!9/36834d/2

SELECT u.id, U.name, u.admin, COUNT(DISTINCT ut.id) property_count, SUM(st.sell_amount)
FROM users_table u
LEFT JOIN users_table ut
ON u.id = ut.property_id
LEFT JOIN sells_table st
ON ut.id  = st.seller_id
WHERE u.admin = 1
GROUP BY u.id, u.admin, u.name