如何根据 table sql 中的列获取公共值
How to get common value based on a column from a table sql
我有一个table。屏幕截图如下:
有两列
- item_details_id
- pay_method_id
在item_details_id中有1,2,1条数据。另一方面pay_method_id有1,1,3个数据。
我只想获取 pay_method_id 的公共值,具体取决于 item_details_id。
根据给定的截图-
在 item_details_id 我有“1”和“2”值。
----- '1' pay_method_id 是 '1', '3'
----- '2' pay_method_id 是 '1'
所以我只有'1'数据是pay_method_id
的常见数据
如果我举个干净的例子
假设名为 laptop 的产品使用 Paypal 和 Skrill 付款方式。
另一个名为 desktop 的产品有 Skrill 支付方式..
那么如何获取名为 skrill 的通用支付方式?
如何获取值?我不明白我该如何解决这个问题。
任何帮助都会对我很有帮助。
您可以使用聚合:
select pay_method_id
from item_pays
where item_details_id in (1, 2)
group by pay_method_id
having count(distinct item_details_id) = 2;
returns pay_method_id
item_details_id
1
和 2
的所有 pay_method_id
,我就是这样解释你的问题的。
这将检查物品是否具有相同的报酬
CREATE TABLE item_pays (
`item_details_id` INTEGER,
`pay_method_id` INTEGER
);
INSERT INTO item_pays
(`item_details_id`, `pay_method_id`)
VALUES
('1', '1'),
('2', '1'),
('1', '3');
SELECT `pay_method_id`
FROM item_pays
GROUP BY `pay_method_id`
HAVING COUNT(DISTINCT `item_details_id`) > 1
| pay_method_id |
| ------------: |
| 1 |
SELECT `pay_method_id`
,GROUP_CONCAT(DISTINCT `item_details_id`) items
FROM item_pays
GROUP BY `pay_method_id`
HAVING COUNT(DISTINCT `item_details_id`) > 1
pay_method_id | items
------------: | :----
1 | 1,2
db<>fiddle here
如果您想要 pay_method_id
具有所有可用的 item_details_id
,您可以这样做:
select pay_method_id
from mytable
group by pay_method_id
having count(*) = (select count(distinct item_details_id) from mytable)
如果可能有重复的(pay_method_id, item_details_id)
,则使用:
having count(distinct item_details_id) = (select count(distinct item_details_id) from mytable)
我有一个table。屏幕截图如下:
有两列
- item_details_id
- pay_method_id
在item_details_id中有1,2,1条数据。另一方面pay_method_id有1,1,3个数据。
我只想获取 pay_method_id 的公共值,具体取决于 item_details_id。
根据给定的截图-
在 item_details_id 我有“1”和“2”值。
----- '1' pay_method_id 是 '1', '3'
----- '2' pay_method_id 是 '1'
所以我只有'1'数据是pay_method_id
的常见数据如果我举个干净的例子
假设名为 laptop 的产品使用 Paypal 和 Skrill 付款方式。 另一个名为 desktop 的产品有 Skrill 支付方式..
那么如何获取名为 skrill 的通用支付方式?
如何获取值?我不明白我该如何解决这个问题。
任何帮助都会对我很有帮助。
您可以使用聚合:
select pay_method_id
from item_pays
where item_details_id in (1, 2)
group by pay_method_id
having count(distinct item_details_id) = 2;
returns pay_method_id
item_details_id
1
和 2
的所有 pay_method_id
,我就是这样解释你的问题的。
这将检查物品是否具有相同的报酬
CREATE TABLE item_pays ( `item_details_id` INTEGER, `pay_method_id` INTEGER ); INSERT INTO item_pays (`item_details_id`, `pay_method_id`) VALUES ('1', '1'), ('2', '1'), ('1', '3');
SELECT `pay_method_id` FROM item_pays GROUP BY `pay_method_id` HAVING COUNT(DISTINCT `item_details_id`) > 1
| pay_method_id | | ------------: | | 1 |
SELECT `pay_method_id` ,GROUP_CONCAT(DISTINCT `item_details_id`) items FROM item_pays GROUP BY `pay_method_id` HAVING COUNT(DISTINCT `item_details_id`) > 1
pay_method_id | items ------------: | :---- 1 | 1,2
db<>fiddle here
如果您想要 pay_method_id
具有所有可用的 item_details_id
,您可以这样做:
select pay_method_id
from mytable
group by pay_method_id
having count(*) = (select count(distinct item_details_id) from mytable)
如果可能有重复的(pay_method_id, item_details_id)
,则使用:
having count(distinct item_details_id) = (select count(distinct item_details_id) from mytable)