【问题标题】:MYSQL: Union operator to add a 'total' rowMYSQL:联合运算符添加“总计”行
【发布时间】:2017-11-28 11:37:18
【问题描述】:

我创建了以下 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

如何让这个查询运行? 谢谢

【问题讨论】:

    标签: mysql phpmyadmin union


    【解决方案1】:

    试试这个:我们在使用集合操作时必须遵循以下三点

    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
    

    【讨论】:

    • 这行得通!非常感谢,我花了很多时间来解决这个问题!
    猜你喜欢
    • 2010-10-14
    • 2020-10-02
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2017-10-04
    相关资源
    最近更新 更多