【问题标题】:DISTINCT multiple COLUMNS with IF带有 IF 的 DISTINCT 多列
【发布时间】:2026-01-10 04:05:02
【问题描述】:

看到很多关于它的帖子,但令人惊讶的是语法问题
这是代码:

SELECT o.shortName AS '1'
      ,SUM(ai.amount) AS '3' 
      ,....
      ,COUNT(DISTINCT (IF (et.name LIKE 'lalala',ai.event_id,ai.action_id,ai.visit_id,NULL))) AS '6'
      ,...
      ,ROUND(SUM(ai.sum),2) AS '15'
  JOIN .... many tables
 GROUP BY o.id

好吧,正如你所见,IF 需要 3 个操作数,但 DISTNICT 不能使用括号。
最后不能使用 group by。
错误消息:操作数应包含 1 列 cpt Obvios
附: mysql,INNODB

【问题讨论】:

  • 好吧,尝试COUNT(DISTINCT (IF (et.name LIKE 'Лечебно-диагностический',**CONCAT(ai.event_id,ai.action_id,ai.visit_id)**,NULL)))),但仍然不确定。也许,应该改变表添加列
  • 你到底想做什么?请附上预期结果和样本数据
  • 这三列和id一样是唯一的。我想检查条件并计算不同的行。
  • 预期 - 唯一行。样本数据很难进行大查询
  • CONCAT 更改为 CONCAT_WS(',',ai.event_id,ai.action_id,ai.visit_id)。如果 id 像 ...1-11 ..,它会救我

标签: mysql syntax distinct multiple-columns


【解决方案1】:

您可以尝试使用 CONCAT_WS 而不是 CONCAT 以避免当 id 看起来相似时错误计数,就像 (1, 11, 111) 一样

【讨论】:

  • 是的,10 分钟前收到)
  • 将 Vista 工作流迁移到 * 的过程已经开始!