我有一张餐桌,上面有餐厅的销售额.我想确定哪个是每个store 最常见的销售,并基于多个最大值创建新的列. 我的表格如下:

store_ id Units_sold_Saturday Units_sold_Sunday Menu_Item
X123 125 120 Pie
X123 155 100 Cheesecake
X123 100 125 Brownie
X124 178 77 Pasta
X124 90 10 Ice cream
X124 90 15 Pizza
.... .... .... ....

我希望我的数据如下所示--每个store 都有一行.

store_ id SaturdayItem SundayItem
X123 Cheesecake Brownie
X124 Pasta pasta

其中,新列‘星期六项目’和新列‘星期日项目’包含当天售出最多的MENU_ITEM

我try 了一些方法,比如

select distinct store_id, 
case when max(Units_sold_Saturday) then Menu_item end as 'SaturdayItem',
case when max(Units_sold_Sunday) then Menu_item end as 'SundayItem'
from table 

但是我得到了‘意外’周六项‘错误.

我想知道我是否只需要创建一个列出所有唯一store_id的空表,创建新的空列‘Units_Sold_SUNDAY’和‘UNITS_SELD_SAXTIVE’. 我只是不确定如何获取Menu_Item值,而不是Units_Sell值,因为这将是max(Units_Sold_Satday)的结果.

谢谢你的帮忙

推荐答案

使用MAX_BY:

SELECT store_id, 
    MAX_BY(Menu_Item,Units_sold_Saturday) AS SaturdayItem,
    MAX_BY(Menu_Item,Units_sold_Sunday) AS Sunday
FROM tab
GROUP BY store_id
ORDER BY store_id;

对于输入:

CREATE OR REPLACE TABLE tab(store_id TEXT,
Units_sold_Saturday INT,
Units_sold_Sunday INT,
Menu_Item TEXT)
AS
          SELECT 'X123', 125    ,120    ,'Pie'
UNION ALL SELECT 'X123', 155    ,100    ,'Cheesecake'
UNION ALL SELECT 'X123', 100    ,125    ,'Brownie'
UNION ALL SELECT 'X124', 178    ,77     ,'Pasta'
UNION ALL SELECT 'X124', 90     ,10     ,'Ice cream'
UNION ALL SELECT 'X124', 90     ,15     ,'Pizza';

输出:

enter image description here

Sql相关问答推荐

BigQuery`喜欢ANY‘和`不喜欢ANY’

基于前面行的值:当x&>2时重复1,当连续3行x=0时则重复0

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

在SQL查询中使用COALESS

SQL计数条目大于日期,包括交叉表中的零

显示十进制列,但尽可能显示为整数

其中使用表名作为;行值;记录?

输出连续出现两次以上的行

每个分组最多 Select 最后 2 个值并并排显示它们

如何向 mariadb 添加外键?

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

SQL Server - 复杂场景 - 比较状态并填充值到后续行

SQL 多个不满足的条件失败

获取记录的上一个值,并将其与当前值一起显示

基于字符串的SQL查询

所有列分组的简写?

如何将特定值从 JSON 列中的一个字段移动到 PostgreSQL 中的另一个字段?

Clob 问题 - 将 clob 列拆分为多行

检索具有相同位置的最小和最大store 数量

PlSql 陷入死循环