SQL选择不同表

时间:2016-03-29 18:00:40

标签: php mysql sql

我需要帮助来解决这个问题。 我有4张桌子:

交易

| id | cid | gt |   rt |

|  1 |  6  | 2  |  5   |
|  2 |  6  | 9  |  7.5 |
|  3 |  6  | 3  |  9.7 |
|  4 |  3  | 3  |  7.0 |
|  5 |  3  | 7  |  6.8 |
|  6 |  9  | 4  |  2.5 |
|  7 |  9  | 2  |  5.4 |

客户

| id | firstname | lastname | date |

|  1 |  jean     | moulin   | 1987 | 
|  2 |  salah    | fera     | 1968
|  3 |  marouan  | youra    | 2001 |
|  4 |  amin     | esa      | 1963 |
|  5 |  kamal    | tara     | 1789 |
|  6 |  moad     | mara     | 2005 |
|  9 |  safaa    | dara     | 2004 |

生产A

| id | cid | 

|  1 |  6  | 
|  2 |  6  | 
|  3 |  3  | 
|  4 |  3  | 
|  5 |  3  |
|  6 |  4  | 
|  7 |  1  | 

生产B

| id | cid |

|  1 |  6  | 
|  2 |  3  | 
|  3 |  9  | 
|  4 |  3  | 
|  5 |  3  | 
|  6 |  4  | 
|  7 |  6  | 

我需要的结果是:

cid |  name |  date  |  pa | pb | gt | rt | 
3   |       |        |     |    |    |    |
6   |       |        |     |    |    |    |
9   |       |        |     |    |    |    |

我需要从事务中选择所有不同的客户端ID(pid)并从clients表中选择名字和姓氏(name = firstname lastname)和日期,并将所有值(gt)和(rt)相加并在表produitA中搜索这个客户的产品数量由他的id和表produitB的相同东西。

我为此做了什么,但它不起作用(由Gimeniux建议):

SELECT 
clients.id, 
CONCAT(firstname, ' ', lastname) as name,
date, 
count(distinct produitA.id) as pa, 
count(distinct produitB.id) as pb, 
sum(gt) AS gt, 
sum(rt) AS rt 

FROM clients
LEFT JOIN transactions ON clients.id = transactions.pid
LEFT JOIN produitA ON clients.id  = produitA.cid
LEFT JOIN produitB ON clients.id = produitB.cid

where pid is not null
group by clients.id

这里的问题是gt和rt值仅适用于第一个客户端。对于第二个客户和第三个......以及不同的值是不正确的。

1 个答案:

答案 0 :(得分:1)

虽然我很难看到表之间的逻辑,但您可以使用此查询来获得所需的结果。但我认为,如果一个客户端有两个相同的'gt'或两个相同的'rt'值,它将无效。

SELECT 
clients.id, 
CONCAT(firstname, ' ', lastname) as name,
date, 
count(distinct produitA.id) as pa, 
count(distinct produitB.id) as pb, 
sum(distinct gt) AS gt, 
sum(distinct rt) AS rt 

FROM clients
LEFT JOIN transactions ON clients.id = transactions.pid
LEFT JOIN produitA ON clients.id  = produitA.cid
LEFT JOIN produitB ON clients.id = produitB.cid

where pid is not null

group by clients.id

pid = 9的行未显示,因为在您提供的数据中没有id = 9的客户