如何根据表 sql 中的列获取共同值
Posted
技术标签:
【中文标题】如何根据表 sql 中的列获取共同值【英文标题】:How to get common value based on a column from a table sql 【发布时间】:2020-11-01 19:30:33 【问题描述】:我有一张桌子。截图如下:
有两列
-
item_details_id
pay_method_id
在 item_details_id 中有 1,2,1 个数据。另一方面 pay_method_id 有 1,1,3 数据。
我只想根据 item_details_id 获取 pay_method_id 的常用值。
根据给定的截图-
在 item_details_id 我有“1”和“2”的值。
----- '1' pay_method_id 是 '1', '3'
-----'2' pay_method_id 是'1'
所以我只有“1”个数据是常见的 pay_method_id
如果我举一个干净的例子
假设名为笔记本电脑的产品具有 Paypal 和 Skrill 付款方式。 另一个名为 desktop 的产品具有 Skrill 付款方式..
那么我如何才能获得名为 skrill 的常用付款方式?
如何获得价值?我不明白我该如何解决这个问题。
任何帮助都会对我很有帮助。
【问题讨论】:
你能举一个你想要的输出的例子吗? 所以结果只有 1? 【参考方案1】:如果您希望pay_method_id
s 拥有所有可用的item_details_id
s,您可以这样做:
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)
【讨论】:
【参考方案2】:你可以使用聚合:
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;
这将返回 item_details_id
1
和 2
常见的所有 pay_method_id
s,这就是我对您问题的解释。
【讨论】:
【参考方案3】:这将检查项目是否具有相同的报酬
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');
| pay_method_id | | ------------: | | 1 |SELECT `pay_method_id` FROM item_pays GROUP BY `pay_method_id` HAVING COUNT(DISTINCT `item_details_id`) > 1
pay_method_id |项目 ------------: | :---- 1 | 1,2SELECT `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
db小提琴here
【讨论】:
我改了答案 绝对没问题,但问题是当我有另一个项目时有一些付款方式 你的描述很难理解,现在你把事情弄得更复杂了,所以做一个小提琴并准确显示结果集。以上是关于如何根据表 sql 中的列获取共同值的主要内容,如果未能解决你的问题,请参考以下文章
如何比较两个表的列并将值插入到基于 SQL Server 中存储过程中的比较的新表中
当没有明确的列可以加入时,如何使用另一个表中的值更新 sql 表?
如何根据值 B 对 sql 中的列进行排序,其中字段中的值格式为 A-B-C。我