mysql - 比较两个表或查询和表
问题描述
我有一张这样的桌子:
cp_store name qty
"Cp1" "pesto" "1.0"
"Cp1" "jivara" "1.0"
"Cp1" "Nocciola" "1.0"
"Cp1" "Parfait" "1.0"
"Cp1" "Crema" "1.0"
"Cp1" "Crema" "1.0"
"Cp1" "Malaga" "1.0"
"Cp1" "Ricotta_Limone" "1.0"
"Cp1" "Ricotta_Limone" "1.0"
"Cp1" "Ricotta_Limone" "1.0"
"Cp1" "mango" "1.0"
"Cp1" "Lampone" "1.0"
"Cp1" "Limone_zenzero" "1.0"
"Cp1" "Limone_zenzero" "1.0"
"Cp1" "Limone_zenzero" "1.0"
"Cp1" "Limone_zenzero" "1.0"
"Cp1" "Pistacchio" "1.0"
"Cp1" "Caramello_Salato" "1.0"
"Cp1" "albicocca" "1.0"
"Cp1" "Pistacchio" "1.0"
"Cp1" "Pistacchio" "1.0"
"Cp1" "Pistacchio" "1.0"
"Cp1" "Cioccolato" "1.0"
"Cp1" "Cioccolato" "1.0"
"Cp1" "Cioccolato" "1.0"
"Cp1" "Bacio_Siculo" "1.0"
"Cp1" "Bacio_Siculo" "1.0"
"Cp1" "Bacio_Siculo" "1.0"
"Cp1" "Cioccolato_al_rum" "1.0"
"Cp1" "Cioccolato" "1.0"
"Cp1" "Cioccolato" "1.0"
"Cp1" "Cioccolato" "1.0"
"nice1" "Cioccolato" "1.0"
"nice1" "Cioccolato" "1.0"
"nice1" "Cioccolato" "1.0"
"nice1" "Bacio_Siculo" "1.0"
"nice1" "Bacio_Siculo" "1.0"
"nice1" "Bacio_Siculo" "1.0"
"nice1" "Cioccolato_al_rum" "1.0"
"nice1" "Cioccolato_al_rum" "1.0"
我使用这个查询
SELECT cp_store, nome, SUM(CAST(qta AS DECIMAL(10, 1))) AS total
FROM tb_store
WHERE data_out is null
GROUP BY cp_store, nome
ORDER BY cp_store, nome
获得这个:
cp_store name qty
"Cp1" "Cioccolato" "6.0"
"Cp1" "Cioccolato_al_rum" "1.0"
"Cp1" "Bacio_Siculo" "3.0"
"nice1" "Cioccolato_al_rum" "2.0"
"nice1" "Bacio_Siculo" "3.0"
.
.
.
但我想将结果名称与此表进行比较:
id name presence cp_store
1 "Cioccolato" "1" "All"
2 "Bacio_Siculo" "1" "All"
3 "Ricotta_Limone" "1" "All"
4 "Cioccolato_al_rum" "1" "All"
5 "Pistacchio" "1" "All"
6 "Nocciola" "1" "nice1"
7 "Mascarpone" "1" "Cp1"
8 "Limone" "0" "Cp1"
. . .
如果名称存在且cp_store等于 ALL ,但在第一次查询的结果中未找到,则最终结果 qty 为 0,如下所示:
cp_store name qty
"Cp1" "Cioccolato" "6.0"
"Cp1" "Cioccolato_al_rum" "1.0"
"Cp1" "Bacio_Siculo" "3.0"
"nice1" "Cioccolato_al_rum" "2.0"
"nice1" "Bacio_Siculo" "3.0"
"All" "Pistacchio" "0"
"All" "Limone" "0"
怎么可能?
解决方案
将 aLEFT JOIN
与子查询一起使用,并在未找到时0
用作默认值。qty
SELECT COALESCE(t2.cp_store, 'All') AS cp_store, t1.name, COALESCE(t2.total, 0) AS qty
FROM tb_products AS t1
LEFT JOIN (
SELECT cp_store, nome, SUM(CAST(qta AS DECIMAL(10, 1))) AS total
FROM tb_store
WHERE data_out is null
GROUP BY cp_store, nome
ORDER BY cp_store, nome) AS t2 ON t1.name = t2.nome
推荐阅读
- vue.js - 如何使用 Bootstrap-Vue 从父组件折叠/展开多个动态折叠?
- testing - 如何测试 RTMP 流媒体负载测试
- amazon-web-services - PHP AWS S3 - 使用内容处置下载文件而不使用流式传输
- python - 使用循环创建命名元组的实例作为数据库记录
- cucumber - Citrus cucumber 不提供睡眠的默认实现
- postgresql - 使用 `embeds_many` 查询
- php - 在 PHP 处理程序中解析日期
- web-crawler - 域和所有子站点的网络爬虫
- c# - 如何在 C# 中从 SQL Server 获取总和值
- python - 如何读取和取熊猫中多个表文件的平均值?