【问题标题】:How to write a SQL query on a table with nested record?如何在具有嵌套记录的表上编写 SQL 查询?
【发布时间】:2021-09-18 19:37:01
【问题描述】:

我想知道2021-08-15的顶级水果是什么(以最高总价完成),下表:

产品

------------------
id | name
------------------
1  | banana
2  | orange
3  | apple
4  | watermelon
5  | pineapple

销售

--------------------------------------------------------------------------------
s_id | sn.id | sn.product_id | sn.status | sn.total_price | created_at
--------------------------------------------------------------------------------
1    | 1     | 2             | BOOKED    | 300            | 2021-08-15 12:20:32
     | 2     | 5             | COMPLETED | 800            |
     | 3     | 5             | COMPLETED | 200            |
2    | 4     | 2             | COMPLETED | 500            | 2021-08-16 09:00:59
     | 5     | 1             | CANCELLED | 1000           |

如何在具有嵌套记录的表上编写查询? MySQL 是否还有嵌套记录数据类型?

【问题讨论】:

  • MySQL 并没有真正的“嵌套记录数据类型”。它确实支持 JSON,但这似乎有点矫枉过正。您的 sales 表格式不正确。
  • 表是如何连接的?我想象的 id 是产品的PRIMARY KEY,但是销售表上的FOREIGN KEY 是什么?
  • 您能否分享一下您已经尝试过的查询,您得到的结果是什么以及预期的结果是什么?

标签: mysql sql types nested record


【解决方案1】:
select *
from
  (select p.id,p.name,sum(s.total_price) as sumOfSales
  from product p join sales s on p.id = s.product_id 
  where s.status = "COMPLETED"
  group by p.id,p.name) T
order by sumOfSales desc

【讨论】:

  • 那么,在处理带有嵌套记录的表时,它和往常一样吗?那么 WHERE s.status = "COMPLETED"
  • 那么列的名称是什么?如果它是 sn.status 你必须使用它。这取决于您的数据结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多