[英]SQL query to determine the column based on count of rows
如果在同一天购买了多个项目,需要帮助在购买表上编写 SQL 查询并将“项目”列更改为“多”:
这是示例表:
name | date | item
-------------------------
Jack | 20120105 | TV
Jack | 20120105 | Table
Jack | 20120105 | Chair
Ryan | 20170822 | TV
Roma | 20190525 | TV
Bill | 20110121 | Table
例如,上表中的 Jack 在同一天有多次购买,因此希望“item”列的结果为“Multi”:
name | date | item
-------------------------
Jack | 20120105 | Multi
Ryan | 20170822 | TV
Roma | 20190525 | TV
Bill | 20110121 | Table
此查询有效,但如果同一个人在同一天购买了 2 件以上的商品,该怎么办:
select name
case when p1.item <> p2.item then 'U'
else p1.item
end as item_name
from purchases p1 join purchases p2 on (p1.name = p2.name)
还有其他更好的方法来实现这一目标吗?
谢谢!
使用聚合和case
表达式:
select name, date,
(case when min(item) = max(item) then min(item)
else 'Multi'
end) as item_name
from purchases
group by name, date;
您可以使用EXISTS
子句与SELECT DISTINCT
改变item
到Multi
,当不止一个项目在同一天购买的:
SELECT DISTINCT name, date,
CASE WHEN EXISTS (SELECT *
FROM purchases p2
WHERE p2.name = p1.name
AND p2.date = p1.date
AND p2.item != p1.item) THEN 'Multi'
ELSE item
END AS item
FROM purchases p1
另一种选择是汇总并检查某个人在某一天购买的COUNT
件商品:
SELECT name, date,
CASE WHEN COUNT(*) > 1 THEN 'Multi'
ELSE MIN(item)
END AS item
FROM purchases
GROUP BY name, date
在这两种情况下,输出都是:
name date item
Jack 20120105 Multi
Ryan 20170822 TV
Roma 20190525 TV
Bill 20110121 Table
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.