MYSQL:Union运算符添加'total'行

时间:2017-11-28 11:37:19

标签: mysql phpmyadmin union

我创建了以下SQL查询来计算未来12个月内租约的总收入。

SELECT DISTINCT apartment.addressLine1, lease.monthlyRent, lease.duration,  lease.roomNumber, lease.monthlyRent*lease.duration AS totalLeaseRent
    FROM `lease`
    INNER JOIN apartment on (lease.roomNumber) = (apartment.roomNumber)
    left Join tenantLease on tenantLease.leaseID = lease.leaseID
    WHERE tenantLease.live = 1 AND lease.duration <= 12

返回以下结果:

AddressLine1    monthlyRent Duration(months)  roomNumber    totalLeaseRent
Chlorine Gardens1200        9                 GF02          10800
May Road        800         12                GF03          9600
Beech Hill      900         8                 BG06          7200
Ash Avenue      1000        12                AA04          12000

我现在希望能够有另一行来包含totalLeaseRent的总数。像这样:

AddressLine1    monthlyRent Duration(months)  roomNumber    totalLeaseRent
    Chlorine Garden1200     9                 GF02          10800
    May Road        800         12            GF03          9600
    Beech Hill      900         8             BG06          7200
    Ash Avenue      1000        12            AA04          12000
    TOTAL                                                   *total*   

我尝试了以下代码,但不断收到错误代码: 1222 - 使用的SELECT语句具有不同的列数

SELECT DISTINCT apartment.addressLine1, lease.monthlyRent, lease.duration,  lease.roomNumber, lease.monthlyRent*lease.duration AS totalLeaseRent
FROM `lease`
INNER JOIN apartment on (lease.roomNumber) = (apartment.roomNumber)
left Join tenantLease on tenantLease.leaseID = lease.leaseID
WHERE tenantLease.live = 1 AND lease.duration <= 12

UNION ALL
SELECT 'Total', SUM(lease.monthlyRent * lease.duration)
FROM lease

如何运行此查询? 谢谢

1 个答案:

答案 0 :(得分:0)

尝试:使用设置操作时我们必须遵循以下三点

1- UNION中的每个SELECT语句必须具有相同的列数

2-列也必须具有类似的数据类型

3-每个SELECT语句中的列也必须采用相同的顺序

SELECT DISTINCT apartment.addressLine1, 
    lease.monthlyRent, 
    lease.duration,  
    lease.roomNumber, 
    lease.monthlyRent*lease.duration AS totalLeaseRent
FROM `lease`
INNER JOIN apartment on (lease.roomNumber) = (apartment.roomNumber)
left Join tenantLease on tenantLease.leaseID = lease.leaseID
WHERE tenantLease.live = 1 AND lease.duration <= 12
UNION ALL
SELECT 'Total', NULL, NULL, NULL, SUM(lease.monthlyRent * lease.duration)
FROM lease