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
只有一个disatincvalue1
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;