【问题标题】:SQl Left Join with tables带有表的 SQL 左连接
【发布时间】:2013-11-04 06:50:34
【问题描述】:

我有两张桌子 -
表一:Types

ID | Type
---+------
1  | type1
2  | type2
3  | type3
4  | type4
5  | type5
6  | type6

表2:Details

ID | Type   | EventName | Cost
---+--------+-----------+------
1  | type1  | name1     | 500
2  | type1  | name2     | 500
3  | type2  | name3     | 500
4  | type3  | name4     | 1500
5  | type3  | name5     | 1000
6  | type3  | name6     | 1000

两个表的预期结果:

Type   | Number | Cost
-------+--------+--------------
type1  | 2      | 1000
type2  | 1      | 500
type3  | 3      | 3500
type4  | 0      | 0
type5  | 0      | 0
type6  | 0      | 0

我试过LEFT JOIN。但它没有给我正确的数字。

【问题讨论】:

  • 使用 count(eventName), sum(cost) 作为 agg 函数并按类型分组。
  • 数字字段是什么?
  • 数字字段是条目的 COUNT。
  • @SyedSohailAhmed 我更新了我的查询及其工作正常。请检查

标签: sql join left-join


【解决方案1】:
SELECT t.Type, count(d.Type), sum(d.cost) 
FROM Types t LEFT JOIN Details d ON t.Type=d.Type
group by t.Type,d.Type

【讨论】:

  • 这给出了一个错误..... 列 'd.type' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中
  • 您忘记按类型分组,非聚合列
  • @SyedSohailAhmed 我在 mysql 中执行了我的上述查询,并根据您的要求正常工作。请检查
  • 非常感谢..我之前尝试过分组..但我认为我没有引用连接的 ON 子句中的右列..无论如何你的回答很有帮助..
【解决方案2】:
SELECT 
  t.Type, 
  count(t.type) as Number, 
  sum(d.cost) as Cost 
FROM 
  Types t 
  INNER JOIN Details d 
     ON t.type=d.type 
  GROUP BY t.type

【讨论】:

  • count 应该超过 d.type 以显示 0 个未使用类型的条目
【解决方案3】:

尝试选择 * FROM (t.type), (t.EventName) 哪里总和(d.cost)

【讨论】:

  • lolx...如果我尝试过这个,我会搞砸的。对不起@Hex ..我想你应该再看看我的问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
相关资源
最近更新 更多