gpt4 book ai didi

mysql - 从 MySQL 中的两个不同表中进行 SELECT 和 COUNT

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

我正在使用 phpMyAdmin 并且有两个 SQL 表:

___销售税

|--------|----------|------------|
| STX_Id | STX_Name | STX_Amount |
|--------|----------|------------|
| 1 | Tax 1 | 5.00 |
| 2 | Tax 2 | 13.50 |
|--------|----------|------------|

___库存

|--------|----------|----------|---------------------|
| INV_Id | INV_Name | INV_Rate | INV_ApplicableTaxes |
|--------|----------|----------|---------------------|
| 10 | Bike | 9.00 | 1 |
| 11 | Movie | 3.00 | 1,2 |
|--------|----------|----------|---------------------|

INV_ApplicableTaxes 列出了适用的税费。

对于 ___Inventory 表中的每个商品,我都链接了表 ___SalesTaxes 以了解女巫税适用于该商品。

如何在 ___Inventory 中列出商品并汇总适用的税费以获得如下内容:

  • 自行车 - 适用税费为 5.00%
  • 电影 - 适用税费为 18.50%

我已经尝试过的是:

SELECT 
a.INV_ApplicableTaxes,
(
SELECT Count(b.STX_Amount)
FROM ___SalesTaxes
Where b.STX_Id = a.INV_ApplicableTaxes
) as b_count
FROM ___Inventory

谢谢。

最佳答案

你的数据结构非常糟糕。您不应将 1,2 存储在单个列中。为什么不呢?

  • 整数应存储为整数,而不是字符串。
  • 应正确声明外键关系。
  • SQL 的字符串处理功能相对较差。
  • SQL 优化器无法很好地优化字符串操作,尤其是表之间的操作。

存储此信息的正确方法是使用单独的 itemTaxes 表,每个项目一行,每个适用税费一行。

也就是说,有时我们会被其他人非常糟糕的设计决策所困扰,并且对此无能为力(直到性能如此糟糕以至于我们不得不这样做)。

您可以使用like做您想做的事情:

SELECT i.INV_ApplicableTaxes, 
(SELECT SUM(st.STX_Amount)
FROM ___SalesTaxes st
WHERE ',' || st.STX_Id || ',' LIKE '%,' || i.INV_ApplicableTaxes || ',%'
) as sum_taxes
FROM ___Inventory i;

注意:这使用 ANSI 标准语法进行字符串连接。有些数据库有自己的语法。

编辑:

在 MySQL 中,您可以使用 find_in_set() 来表达这一点:

SELECT i.INV_ApplicableTaxes, 
(SELECT SUM(st.STX_Amount)
FROM ___SalesTaxes st
WHERE FIND_IN_SET(st.STX_Id, i.INV_ApplicableTaxes) > 0
) as sum_taxes
FROM ___Inventory i;

关于mysql - 从 MySQL 中的两个不同表中进行 SELECT 和 COUNT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077207/

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