如何显示所有记录组

时间:2016-08-26 22:53:42

标签: php mysql

我有这张桌子。

id | promoid | fecha       | Tarifa
--------------------------------------
1  |    1    | 2016-10-01  |  74.38
2  |    1    | 2016-10-02  |  74.38
3  |    2    | 2016-10-01  | 111.57
4  |    2    | 2016-10-02  | 111.57

我想分组并显示日期之间的所有记录。我曾尝试过group by但我只获得了一条记录(第一条记录)。

这是我的SQL

SELECT * 
  FROM promociones
 WHERE fecha >= '2016-10-01' 
   AND fecha < '2016-10-03' 
 GROUP  
    BY promoid

当sql运行时,它只显示按promoid分组的第一行。像这样的东西。

id | promoid | fecha       | Tarifa
-------------------------------------- 
1  |    1    | 2016-10-01  |  74.38

3  |    2    | 2016-10-01  | 111.57

表格太长了,但我想获得promoid所有的行。这样的事情。

id | promoid | fecha       | Tarifa
--------------------------------------
1  |    1    | 2016-10-01  |  74.38
2  |    1    | 2016-10-02  |  74.38
3  |    2    | 2016-10-01  | 111.57
4  |    2    | 2016-10-02  | 111.57

2 个答案:

答案 0 :(得分:1)

“通常” ...

按查询分组“allways”意味着两件事:

  • 结果集的记录少于没有group by
  • 的等效对应查询
  • 选择表达式列表(输出中显示的内容)包括与sum()生成的每个组相关且有意义的任何分组函数(count()max()group by

特别针对您的问题:您,期望“所有”记录(相同金额),并且您没有或期望或建议任何相关的分组功能。正如在评论中所说的那样,它似乎可以解决为select * from ...,或者你需要解释或更好地思考你想要的东西。

所以给出:
select expr1, expr2, expr3, expr4 group by expr1, expr2

请将group by视为收到某些输入数据的优点,并根据此规则提供一些输出数据:

  • 对于输入数据上存在的expr1,expr2的每个不同组合,输出将只有一条记录。 (这就是你的例子显示两条记录的原因)
  • expr3,expr4必须(或包含)分组功能,这将输出“该组”相关数据。
    这里关于MySql的一句话:在MySql语法上,如果省略expr3和expr4上的任何分组函数,你可以假设它使用whatever()作为分组函数,这样:whatever(expr3), whatever(expr4)并输出任何值从“那个组”内部(这就是为什么你可以在你的例子中使用*并且你有显示的输出)

答案 1 :(得分:0)

SELECT * 
  FROM tabletwo
 WHERE fecha >= '2016-10-01' 
   AND fecha < '2016-10-03' 
ORDER BY promoid