mysql - SQL SUMPRODUCT 有一个扭曲

标签 mysql sql

Table WIDGET
    Columns Country, Contract, Price

Table WEIGHT
    Columns Contract, Weight

我正在尝试执行 SUMRPRODUCT(Contract, Weight)/SUM(Weight) 但针对 Country 的所有值。我试过的改编自 Weighted average in T-SQL (like Excel's SUMPRODUCT)看起来像

SELECT 
    Country 
    SUM(widget.price * weight.weight) / SUM(weight.weight)
FROM
    Widget
        INNER JOIN
    Weight ON Widget.contract = Weight.contract
WHERE
    Weight.contract >= '2016-01-01'
    AND Weight.contract <= '2016-12-01'

这个问题是它为 Country 的一个值而不是所有值计算它。我怎样才能得到 DISTINCT(Country) 的列表和旁边过滤后的契约(Contract)的 SUMPRODUCT()/SUM()

示例数据

+-----------+---------+------------+-------+
| widget_id | country | contract   | price |
+-----------+---------+------------+-------+
|         4 | CA      | 2016-01-01 | 16.00 |
|         5 | CA      | 2016-02-01 | 32.00 |
|         6 | CA      | 2016-03-01 | 64.00 |
|         1 | US      | 2016-01-01 | 32.00 |
|         2 | US      | 2016-02-01 | 64.00 |
|         3 | US      | 2016-03-01 | 96.00 |
+-----------+---------+------------+-------+

+-----------+------------+--------+
| weight_id | contract   | weight |
+-----------+------------+--------+
|         1 | 2016-01-01 |      1 |
|         2 | 2016-02-01 |      8 |
|         3 | 2016-03-01 |     64 |
+-----------+------------+--------+

期望的输出

+---------+-----------+
| Country | Wtd Price |
+---------+-----------+
| CA      | 59.835616 |
| US      | 91.616438 |
+---------+-----------+

最佳答案

你应该像这样按国家分组

SELECT 
    Country 
    SUM(widget.price * weight.weight) / SUM(weight.weight)
FROM
    Widget
        INNER JOIN
    Weight ON Widget.contract = Weight.contract
WHERE
    Weight.contract >= '2016-01-01'
    AND Weight.contract <= '2016-12-01'
GROUP BY Country

关于mysql - SQL SUMPRODUCT 有一个扭曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31622179/

相关文章:

javascript - Node.JS 没有选择数据库,尽管它是

sql - 删除MySQL中某个字段的部分数据

mysql - 优化sql查询

c# - 如果子外键已存在,SaveChanges 上的 DbUpdateException - 在 Entity Framework Code First 中

Python/MySQL "Insert into"带变量

php - 为类建立 PDO 连接的正确方法

php - MySQL SELECT 查询中的捆绑记录,存储为时间戳

mysql - 计算不同日期 MySQL 返回一行

php - 当结果来自多个连接条件时如何在 cakephp 中分页

php - 在 mysql 查询中使用 sha1 哈希更改密码搜索 ID