php - 连接 2 个表 X 和 Y 以显示 Total sum() 结果事件表 Y 为空

标签 php mysql web-applications

我有 2 个表,我需要加入并根据要求对数量求和。这是表格结构。

Customer
---------------------------------------------------
ID | Name        | Tel          | Sex
---------------------------------------------------
1  | John        | 123 XXXX     |  M
2  | Peter       | 456 XXXX     |  M
3  | Alice       | 789 XXXX     |  F
4  | Amy         | 147 XXXX     |  F

Transaction
---------------------------------------------------
ID | CustID | TranID | Books | Pens | Rulers
---------------------------------------------------
1  |   1    | Jan    |   1   |   1  |   0
2  |   1    | Feb    |   1   |   0  |   0
3  |   2    | Jan    |   1   |   0  |   1
4  |   2    | Jan    |   1   |   0  |   0
5  |   3    | Feb    |   0   |   1  |   1
6  |   4    | Feb    |   1   |   1  |   0
7  |   3    | Feb    |   1   |   1  |   0
8  |   4    | Feb    |   0   |   0  |   1
9  |   3    | Jan    |   1   |   0  |   0
10 |   2    | Jan    |   1   |   1  |   0

Required Results (Sex=F, TranID=Jan, Sum:Books, Pens & Rulers)
--------------------------------------------------------------
Name        | Tel         | Sex | B.TOT | P.TOT | R.TOT
--------------------------------------------------------------
Alice       | 789 XXXX    |  F  |   1   |   0   |   0
Amy         | 147 XXXX    |  F  |   0   |   0   |   0

我已经尝试使用以下 SQL 语句,只要事务表不为空,它就可以正常工作。

select 
`customer`.name,
`customer`.tel,
`customer`.sex,
sum(if(`transaction`.TranID = 'JAN',books,0)) as B.Tot,
sum(if(`transaction`.TranID = 'JAN',pens,0)) as P.Tot,
sum(if(`transaction`.TranID = 'JAN',rulers,0)) as R.tot,
from 
`customer` 
left join 
`transaction` 
on 
`customer`.id = `transaction`.custid
where
`customer`.sex = 'F'
Group by 
`customer`.id,
order by 
`customer`.name ASC

即使交易表完全为空,我如何修改上面的内容以显示 SEX='F' 的客户列表?

最佳答案

SQL 查询

我希望这个查询能解决您的问题:

SELECT 
    c.name,
    c.tel,
    c.sex,
    IFNULL(SUM(t.books), 0) 'B.TOT',
    IFNULL(SUM(t.pens), 0) 'P.TOT',
    IFNULL(SUM(t.rulers), 0) 'R.TOT'
FROM
    customer c
        LEFT JOIN
    `transaction` t ON t.custid = c.id AND t.TranID = 'Jan'
WHERE
   c.sex = 'F'
GROUP BY c.id
ORDER BY c.name;

关于php - 连接 2 个表 X 和 Y 以显示 Total sum() 结果事件表 Y 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32262438/

相关文章:

java - 在运行时预编译 Jsp 文件

php - 是否可以将使用 php 上传的文件传递给 javascript 作为输入?

php - WP - 用于在数据库中创建时间戳的按钮

php - 使用 Laravel 在其他表中显示产品名称

mysql - 如何为具有三个主表的同一个子表添加三个外键?

php - 使用 Laravel 的 ORM Eloquent 通过多个数据透视表查询对象

java - Maven是否应该为不同的应用服务器打包不同的WAR?

php - ubuntu 16 上 php7 出现 Apache2 错误

PHP RegEx 错误未知修饰符 '('

java - 如何从 Web 应用程序内部使用 Netty - 正确配置的步骤