在SQL查询中使用if语句之后的分组和大小写

时间:2017-08-04 05:48:22

标签: php mysql

我的数据库是这样的,但这是一个演示:

id | pkg_name  | pkg_value
1  | package 1 | 1200
2  | package 2 | 1200
3  | package 3 | 1200
4  | package 4 | 1200
5  | master    | 1400
6  | master    | 1500

以下是我想查询的内容:

  1. 如果一个项目被列出2次或更多次,则仅计为2。
  2. 如果它只列出一次,那么它只计为1。
  3. 请帮我构建此查询!

    我创建的用于统计所有字段和组的查询如下:

    SELECT pkg_name, count(*) from packages GROUP by pkg_name
    

    先谢谢。

2 个答案:

答案 0 :(得分:1)

SELECT 
   pkg_name, 
   IF(COUNT(*)<=2, COUNT(*), 2) AS total
from packages GROUP by pkg_name

这应该可行,但可能有一个更优化的版本,它不会执行两次计数。

答案 1 :(得分:0)

您可以尝试使用CASE表达式,如果基础计数为1,则将包计数映射为1,否则计数为2或更多时为2。

SELECT
    pkg_name,
    CASE WHEN COUNT(*) = 1 THEN 1 ELSE 2 END AS pkg_cnt
FROM packages
GROUP BY
    pkg_name