在多个国家/地区可用的 SQL SELECT 产品

Posted

技术标签:

【中文标题】在多个国家/地区可用的 SQL SELECT 产品【英文标题】:SQL SELECT products which are available in multiple countries 【发布时间】:2019-11-25 18:39:59 【问题描述】:

我有这张水果的市场和价格表(表实际上只是摘录)

Product Market  Price
Apple   UK  4
Apple   DE  5
Apple   US  4
Apple   IT  3
Banana  US  2
Orange  UK  1
Kiwi    ES  3
Kiwi    DE  10
Kiwi    US  12
Kiwi    UK  11
Cucumb  IT  5
Cucumb  DE  4
Cucumb  UK  3
Peach   IT  12
Peach   DE  10
Peach   UK  10
Peach   US  11

现在我只想选择(或分组)在德国、英国、IT 和美国四个市场都有售的产品。这应该导致这个表:

Product Market  Price
Apple   UK  4
Apple   DE  5
Apple   US  4
Apple   IT  3
Peach   IT  12
Peach   DE  10
Peach   UK  10
Peach   US  11

我用 group by+have+Count Distinct 试过了,但是没用。见下文

SELECT
market, product, AVG(price) as pr
FROM
    fruits
WHERE       
    market IN (DE, IT, UK, US)
GROUP BY
    market, product
HAVING Count (DISTINCT market=4)

我猜我以错误的方式使用了不同的计数。 请帮忙。谢谢!

【问题讨论】:

【参考方案1】:

拥有-条件Count (DISTINCT market=4)应该是:

SELECT
market, product, AVG(price) as pr
FROM
    fruits
WHERE       
    market IN (DE, IT, UK, US)
GROUP BY
    market, product
HAVING Count (DISTINCT market) = 4

【讨论】:

我理解答案,但不是赞成票。在此查询中,count(distinct market) 始终是 1【参考方案2】:

您的产品没有重复的国家/地区。我会推荐简单的窗口函数:

select f.*
from (select f.*, count(*) over (partition by product) as cnt
      from fruits f
      where market in ('DE', 'IT', 'UK', 'US')
     ) f
where cnt = 4;

【讨论】:

以上是关于在多个国家/地区可用的 SQL SELECT 产品的主要内容,如果未能解决你的问题,请参考以下文章

是否可以根据国家/地区提供多个 APK 支持?

iOS 此应用目前在您所在的国家或地区不可用

如何在 WooCommerce 中更改结帐国家/地区选择的悬停颜色?

在 PHP 中根据产品和买家国家/地区计算收入

在 AppStore Connect 中禁用可用国家/地区后对用户有啥副作用

将 iOS 应用程序的可用性限制在一个国家/地区