mysql - MYSQL - 将 GROUP 与 JOIN 一起使用
问题描述
所以这个语句在没有连接的情况下开始,它只是查找产品表并按 item_code 分组结果。
SELECT a.item_code,
a.price,
b.v_no
FROM product a
JOIN variation b ON a.item_code = b.item_code
WHERE a.price>=2
GROUP BY a.item_code
现在我已经添加了我想按 v_no 分组的连接,但前提是数据 v_no 存在。这是因为并非表中的每个项目在product
表中都有相应的条目variation
。因此,item_code
对“普通”产品进行分组,但如果存在v_no
则按 THEN分组。item_code
v_no
以下不起作用:
SELECT a.item_code,
a.price,
b.v_no
FROM product a
JOIN variation b ON a.item_code = b.item_code
WHERE a.price>=2
GROUP BY b.v_no,
a.item_code
分组仍然存在,item_code
但v_no
分组被忽略。
解决方案
- 为了考虑所有产品(有/无变化),您需要更改为
LEFT JOIN
. - 对于条件分组依据,您可以使用
Coalesce()
函数;它将考虑分组依据的第一个非空值。
尝试以下操作:
SELECT a.item_code,
a.price,
b.v_no
FROM product a
LEFT JOIN variation b
ON a.item_code = b.item_code
WHERE a.price >= 2
GROUP BY COALESCE(b.v_no, a.item_code)
推荐阅读
- python - 如何让python脚本永远在线运行?
- asp.net - 在页面模型中使用剃须刀页面注释
- kubernetes - 每日文件放入 Kubernetes
- django - 如何在管理页面上使用 RadioSelect 在 Wagtail 中创建 ManyToOne?
- ruby - 需要帮助处理 Savon 中的 Timeout::Error
- react-native - 反应导航 - TabNavigator-> StackNavigator 中标题菜单图标的 DrawerNavigator
- sql-server - SSIS - 任务分组和序列任务有什么区别?
- xamarin - Xamarin 表单滚动不适用于表视图中的 PullToRefreshLayout
- android - AlarmManager 不调用 BroadcastReceiver
- azure-cosmosdb - 了解 fold() 及其对 Azure Cosmos DB 中 gremlin 查询成本的影响