首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GROUP_CONCAT、GROUP BY、HAVING

使用GROUP_CONCAT、GROUP BY、HAVING
EN

Stack Overflow用户
提问于 2011-10-27 20:35:33
回答 2查看 29K关注 0票数 5

我有一个带有票证的表,我想为不同的odd_id _id选择组合。我的查询如下:

代码语言:javascript
复制
SELECT
ticket_id,
GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
GROUP BY ticket_id

它给我提供了以下内容:

代码语言:javascript
复制
'28', '14472510,14472813,14472546,14472855,14472746,14472610,14472647'
'29', '14471149,14471138,14471125,14475603'
'30', '14471823,14471781,14471655,14471865,14471597,14471968,14471739,14471697,14471923'
'31', '14473874,14473814,14473862,14473838,14473790,14473802,14473826,14473850'
'32', '14471588,14472766,14471651,14471777,14471419'
'33', '14472647,14472605,14471650,14471734'
'34', '14471588,14472704,14471817'
'35', '14475279,14474499'
'282', '14472756,14472652,14472813'
'283', '14471588,14472766,14471419,14471777,14471651'
'284', '14474521'
'285', '14474529'
'286', '14474547'
'287', '14471134,14471199,14473636,14471242,14471398,14471237'

但是如果我使用Having函数,它不会给出结果。显然:它为我提供了以下功能:

代码语言:javascript
复制
SELECT
ticket_id,
GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
GROUP BY ticket_id
HAVING oddsconcat = '14475279,14474499'

返回ticket_id 35,每个人都很高兴,代码运行良好,但是如果oddsconcat大于这个值,它就不会返回任何值。对于ex:

代码语言:javascript
复制
SELECT
ticket_id,
GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
GROUP BY ticket_id
HAVING oddsconcat = '14473874,14473814,14473862,14473838,14473790,14473802,14473826,14473850'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-27 21:51:01

我会将其重写为:

代码语言:javascript
复制
SELECT 
ticket_id, 
GROUP_CONCAT(DISTINCT odd_id ORDER BY odd_id ASC) as oddsconcat 
FROM ticket_odds 
GROUP BY ticket_id 
HAVING oddsconcat = .....

现在,oddsconcat中的输出是确定性的,因为消除了重复项并且项是按升序排列的。

这应该会使匹配变得更容易。

票数 16
EN

Stack Overflow用户

发布于 2011-10-27 22:01:33

假设(ticket_id, odd_id)组合为UNIQUE,这将为您提供包含这两个赔率(可能还有更多其他赔率)的所有票据:

代码语言:javascript
复制
SELECT
  ticket_id,
  GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
WHERE odd_id IN (14475279,14474499)
GROUP BY ticket_id

这将为您提供恰好包含这两个赔率(而不包含其他赔率)的所有门票:

代码语言:javascript
复制
SELECT
  ticket_id,
  GROUP_CONCAT(odd_id) as oddsconcat
FROM ticket_odds
WHERE odd_id IN (14475279,14474499)     --- list
GROUP BY ticket_id
HAVING COUNT(*) = 2                     --- size of list
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7915903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档