【问题标题】:select sum from table where field is in another table with field [closed]从表中选择总和,其中字段在另一个带有字段的表中[关闭]
【发布时间】:2013-12-06 14:55:46
【问题描述】:

也许标题有点混乱,所以这是我要开始工作的查询:

select sum(amount+discount) from `payments` where `id_invoice` in (select `id` from `invoices` where `id_client`='$id'

其中$idclients 表中客户端的id

这里有 3 个表结构:

CREATE TABLE IF NOT EXISTS `clients` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `address` text NOT NULL,
  `phone` varchar(255) NOT NULL,
  `fax` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `company` varchar(255) NOT NULL,
  `mobile` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `invoices` (
  `id` int(11) NOT NULL,
  `id_client` int(11) NOT NULL,
  `invoice_number` int(11) NOT NULL,
  `date_created` int(11) NOT NULL,
  `po_number` varchar(255) NOT NULL,
  `terms` text NOT NULL,
  `notes` text NOT NULL,
  `status` varchar(255) NOT NULL DEFAULT 'Draft',
  `date_saved` int(11) NOT NULL,
  `total` varchar(255) NOT NULL,
  `issue_date` int(11) NOT NULL,
  `due_date` int(11) NOT NULL,
  `cancelled` varchar(255) NOT NULL DEFAULT 'no',
  `tax_percentage` varchar(255) NOT NULL DEFAULT '20',
  PRIMARY KEY (`id`)
);

CREATE TABLE IF NOT EXISTS `payments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_invoice` int(11) NOT NULL,
  `the_date` int(11) NOT NULL,
  `method` varchar(255) NOT NULL,
  `amount` varchar(255) NOT NULL,
  `receipt_no` int(11) NOT NULL,
  `discount` varchar(255) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
);

所以我想获得每个客户的总付款+折扣...

任何帮助将不胜感激。

【问题讨论】:

  • 当前查询遇到的问题是什么?
  • 我在当前查询中看到的唯一问题是缺少右括号,我认为这只是一个复制错误。
  • 哈哈哈右括号是问题所在。我是菜鸟。
  • 这个问题似乎跑题了,因为它是关于语法错误的。

标签: mysql join sum


【解决方案1】:

在我看来,最好将表格连接在一起,然后在按客户名称分组的同时进行求和:

SELECT c.name, SUM(p.amount + p.discount) AS MyCalc
FROM invoices AS i
  JOIN payments AS p ON p.id_invoice = i.id'
  JOIN clients AS c ON c.id = i.id_client
GROUP BY c.name

然后您可以添加 WHERE 子句以进一步限制结果:

SELECT c.name, SUM(p.amount + p.discount) AS MyCalc
FROM invoices AS i
  JOIN payments AS p ON p.id_invoice = i.id'
  JOIN clients AS c ON c.id = i.id_client
WHERE id_client = $id
GROUP BY c.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2016-01-27
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多