gpt4 book ai didi

mysql - 编写 Sum 查询的正确方法

转载 作者:行者123 更新时间:2023-11-29 23:36:29 24 4
gpt4 key购买 nike

我正在尝试查明下面的代码是否采用正确的格式来检索每年的付款总额

select sum(payment)
select mem_type.mtype, member.name, payment.payment_amt
from mem_type, member, payment
where mem_type.mtype = member.mtype
and member.mem_id = payment.mem_id
group by mem_id
having payment.date > '2014-1-1' <'2014-12-31';

最佳答案

该声明存在一些问题。

关键字 SELECT 出现两次,这无效。 (子查询或内联 View 中需要使用 SELECT 关键字,否则重复使用关键字 SELECT 是无效的。

HAVING 子句中的谓词不太正确。 (MySQL 可能会接受该语法作为有效语法,但它并没有执行您想要执行的操作。要返回在特定年份中具有 payment.date 的行,我们通常将其指定为谓词WHERE 子句:

 WHERE payment.date >= '2014-01-01' 
AND payment.date < '2015-01-01'

此外,我建议您放弃连接操作的旧式逗号语法,而使用 JOIN 关键字,并将连接谓词从 WHERE 子句重新定位到 ON 子句。例如:

SELECT ...
FROM member
JOIN mem_type
ON mem_type.mtype = member.mtype
JOIN payment
ON payment.mem_id = member.mem_id

很高兴看到您已经限定了所有列引用。

不幸的是,不可能推荐将返回您正在查找的结果集的语法。未知数太多,我们只能猜测。您希望从哪些数据返回结果的示例,这对规范有很大帮助。

<小时/>

如果我必须在不了解表、列、数据类型等的情况下对满足不明确规范的查询进行盲目“猜测”。我的猜测是这样的:

SELECT m.mem_id
, t.mtype
, m.name
, IFNULL(SUM(p.payment_amt),0) AS total_payments_2014
FROM member m
LEFT
JOIN mem_type t
ON t.mtype = m.mtype
LEFT
JOIN payment p
ON p.mem_id = m.mem_id
WHERE p.date >= '2014-01-01'
AND p.date < '2014-01-01' + INTERVAL 1 YEAR
GROUP BY m.mem_id

这仅作为示例。这是以未提供的大量信息为前提的(例如,付款表中 date 列的数据类型是什么?我们是否要排除日期为 1/1 或 12 的付款/31?mem_id列在member表中是否唯一?mtype列在mem_type表中是否唯一,可以mem_type 成员表中的列为 NULL,我们是否希望返回成员表中的所有行,还是只返回 2014 年付款的行等。付款表中的 mem_id 列可以为 NULL, 付款中是否有我们想要包含但与成员(member)无关的行?等。

关于mysql - 编写 Sum 查询的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26353175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com