Mysql 如果结果只有一条记录,则选择distinct col1、col2,否则选择col3

Mysql 如果结果只有一条记录,则选择distinct col1、col2,否则选择col3,mysql,sql,Mysql,Sql,如果返回的是一条单独的记录,我想选择value1,value2其中item=foo,否则我想返回所有year列,其中item=foo,这样用户每年都可以看到值 Item year value1 value2 ----------------------- foo 12 32 48 foo 13 32 50 foo 14 32 50 foo 15 33 48 foo 16 33 48 foo 17 33 48 fo

如果返回的是一条单独的记录,我想选择
value1
value2
其中
item
=
foo
,否则我想返回所有
year
列,其中
item
=
foo
,这样用户每年都可以看到

Item year value1 value2
-----------------------
foo  12    32    48
foo  13    32    50
foo  14    32    50
foo  15    33    48
foo  16    33    48
foo  17    33    48
fo3  13    38    42
fo3  14    34    44
fo4  15    36    46
fo5  16    37    48
这就是我当前选择不同列的方式,但正如您从我的问题中所看到的,这个查询对于我需要做的事情来说不够复杂

SELECT distinct value1, value2
FROM MyTable
WHERE item = 'foo'
根据当前表格,我期望的结果将是
的结果,其中
=
foo
,因为有多个不同的结果

例:
1214151617

然而,如果我的表如下所示,其中对于
=
foo
只有一个disatinc
value1
value2
,我只希望返回
value1
value2

Item year value1 value2
    -----------------------
    foo  12    32    50
    foo  13    32    50
    foo  14    32    50
    foo  15    32    50
    foo  16    32    50
    foo  17    32    50
    fo3  13    38    42
    fo3  14    34    44
    fo4  15    36    46
    fo5  16    37    48
期望结果

3250

示例逻辑(不能按原样工作)

试试看:

 SELECT year,value1, value2
 FROM MyTable
 WHERE item = 'foo'
 GROUP BY value1, value2
编辑:


您可以通过使用准备好的语句来实现这一点:

SET @item = 'foo'; -- set to 'fo3' for a proof of the expected behaviour

SELECT COUNT(DISTINCT value1, value2)
    INTO @count
    FROM MyTable
    WHERE item = @item;

SET @query = CONCAT('SELECT DISTINCT ', IF(@count = 1, 'value1, value2', 'year'),
                    ' FROM MyTable WHERE item = \'', @item, '\'');

PREPARE stmt FROM @query;

EXECUTE stmt;

DEMO@

从MyTable中选择“count\u one”作为记录、年份、值1、值2、计数(),其中item='foo'按值1分组,值2的计数()为1

联合


从MyTable中选择“count\u many”作为rec\u cnt、year、value1、value2、count(),其中item='foo'按value1分组,value2的count()>1

此查询不够复杂,是吧?@hjpotter92正确,我当前的查询只是一个基本的SELECT distinct语句。我认为这意味着“这个问题对我来说可能太复杂了,无法真正投入精力解决。。。“@SS781不是真的。目前,我使用php计算结果,然后在需要时进行另一个SQL调用。所以这不是一个不能打扰的情况,而是一个不知道的情况。这里没有其他类似的问题。@echo\u Me我已经根据这两个条件用所需的结果示例编辑了我的问题。谢谢,无论返回的结果如何,这将返回不同的记录。我用一些示例逻辑编辑了我的问题,这些示例逻辑是关于我试图达到的目标,这看起来可能有效-但是如果发现了多个记录呢?那么这一年是你的问题?如果您有一个或多个结果,则选择年份与否取决于您,您可以在我编写的第一个查询中选择年份,甚至它会返回您拥有的一个或多个结果,而使用与否取决于您
 SELECT year,value1, value2, count(*)
 FROM MyTable
 WHERE item = 'foo'
 GROUP BY value1, value2 
 HAVING count(*)=1 
SET @item = 'foo'; -- set to 'fo3' for a proof of the expected behaviour

SELECT COUNT(DISTINCT value1, value2)
    INTO @count
    FROM MyTable
    WHERE item = @item;

SET @query = CONCAT('SELECT DISTINCT ', IF(@count = 1, 'value1, value2', 'year'),
                    ' FROM MyTable WHERE item = \'', @item, '\'');

PREPARE stmt FROM @query;

EXECUTE stmt;