花了几个小时读SQL,得到了这个:
SELECT
StoreID,
Products
FROM (
SELECT
StoreID,
ROW_NUMBER() OVER(PARTITION BY StoreID ORDER BY Frequency DESC) AS Ordering,
Products,
Frequency
FROM (
SELECT
StoreID,
Products,
COUNT(Products) AS Frequency
FROM
StoreRecords
WHERE
StoreGroupID = 1122
GROUP BY 1,2
ORDER BY StoreID, Frequency
) AS Output
)
WHERE
Ordering = 1
为不良背景道歉。进一步澄清:
例如,这是我表格中的数据。
商店A: Apple iPhone, Apple iPhone, Android手机
商店B: Apple iPhone, Android手机, Android手机
每家商店有3条记录。 我希望我的输出是:
例如:
商店A,Apple iPhone,2 商店B,Android手机,2
我的表中有2列: 1)商店ID和 2)项目名称
我想写一个返回的查询: 1)商店ID 2)项目名称 3)总数没有。每个商店最受欢迎的商品
我见过几种方法: 1)过度分区 2)内部加入
但不确定哪种方法可以推进。
任何帮助表示感谢。
StoreID产品 1 Apple iPhone 1个Android手机 1个Android手机 1 Apple iPhone 1 Apple充电器 2 Android手机 2 Apple iPhone 2 Apple充电器 2 Android手机 3 Apple iPhone 3 Apple充电器 3 Android手机 3 Apple iPhone
商店ID产品 1 Apple iPhone 2 Android手机 3 Apple iPhone
答案 0 :(得分:1)
设置:
create table sales
(
id integer,
store varchar(8),
product varchar(16)
);
insert into sales (id, store, product) values (1, 'Store A', 'Apple iPhone');
insert into sales (id, store, product) values (2, 'Store A', 'Apple iPhone');
insert into sales (id, store, product) values (3, 'Store A', 'Android Phone');
insert into sales (id, store, product) values (4, 'Store B', 'Apple iPhone');
insert into sales (id, store, product) values (5, 'Store B', 'Android Phone');
insert into sales (id, store, product) values (6, 'Store B', 'Android Phone');
查询:
select
z.store,
z.product,
z.volume
from
(
select
store,
max(volume) as top_volume
from
(
select
store,
product,
count(*) as volume
from
sales
group by
store,
product
) x
group by
store
) y
join
(
select
store,
product,
count(*) as volume
from
sales
group by
store,
product
) z
on
y.store = z.store and
y.top_volume = z.volume;
结果:
store | product | volume
---------+---------------+--------
Store A | Apple iPhone | 2
Store B | Android Phone | 2
(2 rows)
如果排名第一,那么此查询将返回两个产品。
我使用了PostgreSQL,但这可以在任何领先的数据库中使用。请随时询问您是否了解这里发生了什么。
答案 1 :(得分:1)
对于我的回复延迟感到抱歉。
此方法适用于您在商店中共享受欢迎程度的2个项目的情况:
dir
由于您正在学习SQL,因此请注意,您可以在内部查询中引用外部表(在本例中为“s”),该查询获取每个商店的相同项目的最大数量。
花一些时间阅读它,如果您需要进一步澄清,请告诉我。
PS:@Ron Ballard对测试架构的肯定!