gpt4 book ai didi

mysql - 从与第三个表相关的两个表中获取计算

转载 作者:行者123 更新时间:2023-11-29 09:38:56 24 4
gpt4 key购买 nike

我有这张 table

     table1
| id | name |
| 1 | axe |
| 2 | bow |
| 3 | car |
| 4 | dart |

还有这两个表

        table2                                        table3
| t1_id | number | | t1_id | letter |
| 1 | 5 | | 1 | a |
| 1 | 6 | | 1 | b |
| 1 | 2 | | 1 | c |
| 2 | 2 | | 2 | a |
| 2 | 2 | | 2 | c |
| 2 | 3 | | 2 | r |
| 3 | 8 | | 3 | y |
| 3 | 3 | | 3 | i |
| 3 | 1 | | 3 | a |
| 4 | 8 | | 4 | a |
| 4 | 9 | | 4 | b |
| 4 | 10 | | 4 | c |

其中t1_idtable1 id

我想要做的是获取所有具有table3字母a b ctable1记录及其数字的平均值,就像按letter_count的顺序一样> 首先DESC,然后按avg_numbers DESC

|  id  |  name  |  letter_count  |  avg_number   |
| 4 | dart | 3 | 9 |
| 1 | axe | 3 | 4.3333333333 |
| 2 | bow | 2 | 2.3333333333 |
| 3 | car | 1 | 4 |

我期望正常工作的查询是 http://www.sqlfiddle.com/#!9/69086b/3/0

SELECT 
t1.id,
t1.name,
COUNT(t3.letter) AS letter_count,
AVG(t2.number) AS avg_number

FROM
table1 t1

INNER JOIN
table2 t2
ON t2.t1_id = t1.id

LEFT JOIN
table3 t3
ON t3.t1_id = t1.id
AND t3.letter IN ('a', 'b', 'c')

GROUP BY
t1.id

ORDER BY
letter_count DESC,
avg_number DESC

但数字完全不同且准确,但顺序正确

我不想获取letter_count和avg_number值,但我只想按它们排序,但它们的值让我担心查询性能

我不会注意到这个奇怪的值,因为我的实际查询是

SELECT 
t1.id,
t1.name

FROM
table1 t1

INNER JOIN
table2 t2
ON t2.t1_id = t1.id

LEFT JOIN
table3 t3
ON t3.t1_id = t1.id
AND t3.letter IN ('a', 'b', 'c')

GROUP BY
t1.id

ORDER BY
COUNT(t3.letter) DESC,
AVG(t2.number) DESC

这只会给我适当的秩序

|  id  |  name  |
| 4 | dart |
| 1 | axe |
| 2 | bow |
| 3 | car |

但是在检查这些值之后,我对 letter_count 感到惊讶,我是否只是忽略这些值,并且它不会影响我的大表中的性能?

最佳答案

您正在两个不同的维度上进行聚合。这会产生笛卡尔积。解决此问题的一种方法是在加入之前聚合:

SELECT t1.id, t1.name, t2.letter_count, t2.avg_number
FROM table1 t1 INNER JOIN
(SELECT t2.t1_id, AVG(t2.number) as avg_number
FROM table2 t2
GROUP BY t2.t1_id
) t2
ON t2.t1_id = t1.id LEFT JOIN
(SELECT t3.t2_id, COUNT(t3.letter) as letter_count
FROM table3 t3
WHERE t3.letter IN ('a', 'b', 'c')
GROUP BY t3.t2_id
) t3
ON t3.t1_id = t1.id
ORDER BY t3.letter_count DESC, t2.avg_number DESC;

关于mysql - 从与第三个表相关的两个表中获取计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57064640/

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