【问题标题】:Delphi, FireDAC, MySQL QueryDelphi、FireDAC、MySQL 查询
【发布时间】:2020-11-19 21:03:40
【问题描述】:
qClient.SQL.Clear;
qClient.SQL.Text := 'Select C.Lastname,C.Firstname,C.Clino,C.Address,' +
                    'C.City,C.State,C.Zip,C.Phone,C.HerCell,C.HisCell,' +
                    'C.Texting,C.Since,C.Selected,' +
                    'SUM( I.Charges - I.Discount ) as Revenue ' +
                    'from Client C join Invoice I ' +
                    'on I.Clino = C.Clino ' +
                    'where I.Date between :S and :E ' +
                    'and I.Inv = true ' +
                    'group by C.Clino ' +
                    'order by Revenue desc ';
qClient.ParamByName('S').AsDate := dStart;
qClient.ParamByName('E').AsDate := dEnd;
qClient.DetailFields := 'Clino';
qClient.Open();

如何修改上述代码,使查询仅包含超过最小值(例如 1000)的“收入”值?它目前包括所有客户端。

谢谢, 斯派克

【问题讨论】:

    标签: mysql delphi firedac


    【解决方案1】:

    你需要一个HAVING 子句:

    qClient.SQL.Text := 'Select C.Lastname,C.Firstname,C.Clino,C.Address,' +
                        'C.City,C.State,C.Zip,C.Phone,C.HerCell,C.HisCell,' +
                        'C.Texting,C.Since,C.Selected,' +
                        'SUM( I.Charges - I.Discount ) as Revenue ' +
                        'from Client C join Invoice I ' +
                        'on I.Clino = C.Clino ' +
                        'where I.Date between :S and :E ' +
                        'and I.Inv = true ' +
                        'group by C.Clino ' +
                        'having Revenue > 1000 ' +
                        'order by Revenue desc ';
    

    HAVING 子句在聚合后应用条件并过滤查询结果。
    在这种情况下,Revenue 是一个聚合列,不能在同样过滤查询的WHERE 子句中使用,因为WHERE 子句的条件在聚合之前应用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2021-12-10
    • 2016-05-04
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多